ears 0.4.3 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.tool-versions +2 -2
- data/CHANGELOG.md +4 -0
- data/Gemfile.lock +20 -13
- data/lib/ears/consumer.rb +8 -5
- data/lib/ears/middlewares/max_retries.rb +46 -0
- data/lib/ears/version.rb +1 -1
- data/lib/ears.rb +4 -4
- data/package-lock.json +69 -0
- data/package.json +5 -5
- metadata +5 -4
- data/yarn.lock +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 00c59bf7b8e8b2c31ecbc3454f5fcea791f44c5f449ced62a3ce7355537035af
|
4
|
+
data.tar.gz: 6fe721e04d48c16eb9738fe51094c0e08c16a3504e54dcae8ad1c179950c2631
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a2ecdd22678797f8278051aead6b4da35f6a101743fcf6fbca9df4864bbc74d5645aaebeaff213778d2bba9b3f5f671196ce71741f7e2f6f74297cdc48af0523
|
7
|
+
data.tar.gz: be71ea76b36f3fb5092708c636aae0ad5b481498710e5da45d480c7c951baa11a92e2ef3d20caea4c762fa61a1841c49901227d8c16b3b5355e7bffc60931336
|
data/.tool-versions
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
ruby 3.0.
|
2
|
-
nodejs
|
1
|
+
ruby 3.0.2
|
2
|
+
nodejs 16.9.0
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ears (0.
|
4
|
+
ears (0.5.0)
|
5
5
|
bunny
|
6
6
|
multi_json
|
7
7
|
|
@@ -10,18 +10,20 @@ GEM
|
|
10
10
|
specs:
|
11
11
|
amq-protocol (2.3.2)
|
12
12
|
ast (2.4.2)
|
13
|
-
bunny (2.
|
13
|
+
bunny (2.19.0)
|
14
14
|
amq-protocol (~> 2.3, >= 2.3.1)
|
15
|
+
sorted_set (~> 1, >= 1.0.2)
|
15
16
|
diff-lcs (1.4.4)
|
16
17
|
multi_json (1.15.0)
|
17
18
|
parallel (1.20.1)
|
18
|
-
parser (3.0.
|
19
|
+
parser (3.0.2.0)
|
19
20
|
ast (~> 2.4.1)
|
20
21
|
rainbow (3.0.0)
|
21
|
-
rake (13.0.
|
22
|
+
rake (13.0.6)
|
23
|
+
rbtree (0.4.4)
|
22
24
|
redcarpet (3.5.1)
|
23
25
|
regexp_parser (2.1.1)
|
24
|
-
rexml (3.2.
|
26
|
+
rexml (3.2.5)
|
25
27
|
rspec (3.10.0)
|
26
28
|
rspec-core (~> 3.10.0)
|
27
29
|
rspec-expectations (~> 3.10.0)
|
@@ -35,27 +37,32 @@ GEM
|
|
35
37
|
diff-lcs (>= 1.2.0, < 2.0)
|
36
38
|
rspec-support (~> 3.10.0)
|
37
39
|
rspec-support (3.10.2)
|
38
|
-
rubocop (1.
|
40
|
+
rubocop (1.20.0)
|
39
41
|
parallel (~> 1.10)
|
40
42
|
parser (>= 3.0.0.0)
|
41
43
|
rainbow (>= 2.2.2, < 4.0)
|
42
44
|
regexp_parser (>= 1.8, < 3.0)
|
43
45
|
rexml
|
44
|
-
rubocop-ast (>= 1.
|
46
|
+
rubocop-ast (>= 1.9.1, < 2.0)
|
45
47
|
ruby-progressbar (~> 1.7)
|
46
48
|
unicode-display_width (>= 1.4.0, < 3.0)
|
47
|
-
rubocop-ast (1.
|
48
|
-
parser (>=
|
49
|
-
rubocop-rake (0.
|
50
|
-
rubocop
|
51
|
-
rubocop-rspec (2.
|
49
|
+
rubocop-ast (1.11.0)
|
50
|
+
parser (>= 3.0.1.1)
|
51
|
+
rubocop-rake (0.6.0)
|
52
|
+
rubocop (~> 1.0)
|
53
|
+
rubocop-rspec (2.4.0)
|
52
54
|
rubocop (~> 1.0)
|
53
55
|
rubocop-ast (>= 1.1.0)
|
54
56
|
ruby-progressbar (1.11.0)
|
57
|
+
set (1.0.1)
|
58
|
+
sorted_set (1.0.3)
|
59
|
+
rbtree
|
60
|
+
set (~> 1.0)
|
55
61
|
unicode-display_width (2.0.0)
|
56
62
|
yard (0.9.26)
|
57
63
|
|
58
64
|
PLATFORMS
|
65
|
+
arm64-darwin-20
|
59
66
|
x86_64-darwin-20
|
60
67
|
x86_64-linux
|
61
68
|
|
@@ -70,4 +77,4 @@ DEPENDENCIES
|
|
70
77
|
yard
|
71
78
|
|
72
79
|
BUNDLED WITH
|
73
|
-
2.2.
|
80
|
+
2.2.22
|
data/lib/ears/consumer.rb
CHANGED
@@ -46,11 +46,14 @@ module Ears
|
|
46
46
|
# @param [String] payload The payload of the received message.
|
47
47
|
# @raise [InvalidReturnError] if you return something other than +:ack+, +:reject+ or +:requeue+ from {#work}.
|
48
48
|
def process_delivery(delivery_info, metadata, payload)
|
49
|
-
self
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
49
|
+
self
|
50
|
+
.class
|
51
|
+
.middlewares
|
52
|
+
.reverse
|
53
|
+
.reduce(work_proc) do |next_middleware, middleware|
|
54
|
+
nest_middleware(middleware, next_middleware)
|
55
|
+
end
|
56
|
+
.call(delivery_info, metadata, payload)
|
54
57
|
end
|
55
58
|
|
56
59
|
protected
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'ears/middleware'
|
2
|
+
|
3
|
+
module Ears
|
4
|
+
module Middlewares
|
5
|
+
# A middleware that automatically puts messages on an error queue when the specified number of retries are exceeded.
|
6
|
+
class MaxRetries < Middleware
|
7
|
+
# @param [Hash] opts The options for the middleware.
|
8
|
+
# @option opts [Integer] :retries The number of retries before the message is sent to the error queue.
|
9
|
+
# @option opts [String] :error_queue The name of the queue where messages should be sent to when the max retries are reached.
|
10
|
+
def initialize(opts)
|
11
|
+
super()
|
12
|
+
@retries = opts.fetch(:retries)
|
13
|
+
@error_queue = opts.fetch(:error_queue)
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(delivery_info, metadata, payload, app)
|
17
|
+
return handle_exceeded(payload) if retries_exceeded?(metadata)
|
18
|
+
app.call(delivery_info, metadata, payload)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
attr_reader :retries, :error_queue
|
24
|
+
|
25
|
+
def handle_exceeded(payload)
|
26
|
+
Bunny::Exchange
|
27
|
+
.default(Ears.channel)
|
28
|
+
.publish(payload, routing_key: error_queue)
|
29
|
+
:ack
|
30
|
+
end
|
31
|
+
|
32
|
+
def retries_exceeded?(metadata)
|
33
|
+
rejected_deaths =
|
34
|
+
metadata
|
35
|
+
.headers
|
36
|
+
.fetch('x-death', [])
|
37
|
+
.select { |death| death['reason'] == 'rejected' }
|
38
|
+
|
39
|
+
return false unless rejected_deaths.any?
|
40
|
+
|
41
|
+
retry_count = rejected_deaths.map { |death| death['count'] }.max
|
42
|
+
retry_count > @retries
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/ears/version.rb
CHANGED
data/lib/ears.rb
CHANGED
@@ -24,7 +24,8 @@ module Ears
|
|
24
24
|
#
|
25
25
|
# @return [Bunny::Session]
|
26
26
|
def connection
|
27
|
-
@connection ||=
|
27
|
+
@connection ||=
|
28
|
+
Bunny.new(configuration.rabbitmq_url).tap { |conn| conn.start }
|
28
29
|
end
|
29
30
|
|
30
31
|
# The channel for the current thread.
|
@@ -51,8 +52,8 @@ module Ears
|
|
51
52
|
running = true
|
52
53
|
Signal.trap('INT') { running = false }
|
53
54
|
Signal.trap('TERM') { running = false }
|
54
|
-
sleep 1 while running &&
|
55
|
-
raise @error if @
|
55
|
+
sleep 1 while running && @error.nil?
|
56
|
+
raise @error if @error
|
56
57
|
end
|
57
58
|
|
58
59
|
# Signals that an uncaught error has occurred and the process should be stopped.
|
@@ -60,7 +61,6 @@ module Ears
|
|
60
61
|
# @param [Exception] error The unhandled error that occurred.
|
61
62
|
def error!(error)
|
62
63
|
puts(error.full_message)
|
63
|
-
@uncaught_error_occurred = true
|
64
64
|
@error = error
|
65
65
|
end
|
66
66
|
|
data/package-lock.json
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
{
|
2
|
+
"name": "ears",
|
3
|
+
"lockfileVersion": 2,
|
4
|
+
"requires": true,
|
5
|
+
"packages": {
|
6
|
+
"": {
|
7
|
+
"name": "ears",
|
8
|
+
"devDependencies": {
|
9
|
+
"@invisionag/prettier-config-ivx": "^3.0.0",
|
10
|
+
"@prettier/plugin-ruby": "^1.6.1",
|
11
|
+
"prettier": "^2.4.0"
|
12
|
+
}
|
13
|
+
},
|
14
|
+
"node_modules/@invisionag/prettier-config-ivx": {
|
15
|
+
"version": "3.0.0",
|
16
|
+
"resolved": "https://registry.npmjs.org/@invisionag/prettier-config-ivx/-/prettier-config-ivx-3.0.0.tgz",
|
17
|
+
"integrity": "sha512-tUFmF0OJfpiAZnjnn4T9Bg+CJMeLwlvbGyRm3hmvLn6RiMnvzdr19G8DmBxGIQTCbvgkkWsWzzChxw6mdBfoog==",
|
18
|
+
"dev": true,
|
19
|
+
"peerDependencies": {
|
20
|
+
"prettier": ">=2.0.0"
|
21
|
+
}
|
22
|
+
},
|
23
|
+
"node_modules/@prettier/plugin-ruby": {
|
24
|
+
"version": "1.6.1",
|
25
|
+
"resolved": "https://registry.npmjs.org/@prettier/plugin-ruby/-/plugin-ruby-1.6.1.tgz",
|
26
|
+
"integrity": "sha512-PGDCATgVTQz0s/NB9nStiXVCIr+hG/XnKeAO/kguaHrNf8VwCpP5Ul+/KQao0z0QFBy2PDY8kWptfDQCa7WMXg==",
|
27
|
+
"dev": true,
|
28
|
+
"dependencies": {
|
29
|
+
"prettier": ">=1.10"
|
30
|
+
}
|
31
|
+
},
|
32
|
+
"node_modules/prettier": {
|
33
|
+
"version": "2.4.0",
|
34
|
+
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.0.tgz",
|
35
|
+
"integrity": "sha512-DsEPLY1dE5HF3BxCRBmD4uYZ+5DCbvatnolqTqcxEgKVZnL2kUfyu7b8pPQ5+hTBkdhU9SLUmK0/pHb07RE4WQ==",
|
36
|
+
"dev": true,
|
37
|
+
"bin": {
|
38
|
+
"prettier": "bin-prettier.js"
|
39
|
+
},
|
40
|
+
"engines": {
|
41
|
+
"node": ">=10.13.0"
|
42
|
+
}
|
43
|
+
}
|
44
|
+
},
|
45
|
+
"dependencies": {
|
46
|
+
"@invisionag/prettier-config-ivx": {
|
47
|
+
"version": "3.0.0",
|
48
|
+
"resolved": "https://registry.npmjs.org/@invisionag/prettier-config-ivx/-/prettier-config-ivx-3.0.0.tgz",
|
49
|
+
"integrity": "sha512-tUFmF0OJfpiAZnjnn4T9Bg+CJMeLwlvbGyRm3hmvLn6RiMnvzdr19G8DmBxGIQTCbvgkkWsWzzChxw6mdBfoog==",
|
50
|
+
"dev": true,
|
51
|
+
"requires": {}
|
52
|
+
},
|
53
|
+
"@prettier/plugin-ruby": {
|
54
|
+
"version": "1.6.1",
|
55
|
+
"resolved": "https://registry.npmjs.org/@prettier/plugin-ruby/-/plugin-ruby-1.6.1.tgz",
|
56
|
+
"integrity": "sha512-PGDCATgVTQz0s/NB9nStiXVCIr+hG/XnKeAO/kguaHrNf8VwCpP5Ul+/KQao0z0QFBy2PDY8kWptfDQCa7WMXg==",
|
57
|
+
"dev": true,
|
58
|
+
"requires": {
|
59
|
+
"prettier": ">=1.10"
|
60
|
+
}
|
61
|
+
},
|
62
|
+
"prettier": {
|
63
|
+
"version": "2.4.0",
|
64
|
+
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.0.tgz",
|
65
|
+
"integrity": "sha512-DsEPLY1dE5HF3BxCRBmD4uYZ+5DCbvatnolqTqcxEgKVZnL2kUfyu7b8pPQ5+hTBkdhU9SLUmK0/pHb07RE4WQ==",
|
66
|
+
"dev": true
|
67
|
+
}
|
68
|
+
}
|
69
|
+
}
|
data/package.json
CHANGED
@@ -3,13 +3,13 @@
|
|
3
3
|
"private": true,
|
4
4
|
"scripts": {
|
5
5
|
"prettify": "prettier \"**/*.{ru,rb,yml,yaml,md,gemspec,json}\" --ignore-path=\".gitignore\"",
|
6
|
-
"lint": "
|
7
|
-
"format": "
|
6
|
+
"lint": "npm run prettify -- --check",
|
7
|
+
"format": "npm run prettify -- --write"
|
8
8
|
},
|
9
9
|
"devDependencies": {
|
10
|
-
"@invisionag/prettier-config-ivx": "^
|
11
|
-
"@prettier/plugin-ruby": "^1.
|
12
|
-
"prettier": "^2.
|
10
|
+
"@invisionag/prettier-config-ivx": "^3.0.0",
|
11
|
+
"@prettier/plugin-ruby": "^1.6.1",
|
12
|
+
"prettier": "^2.4.0"
|
13
13
|
},
|
14
14
|
"prettier": "@invisionag/prettier-config-ivx"
|
15
15
|
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ears
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mario Mainz
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-11-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bunny
|
@@ -163,10 +163,11 @@ files:
|
|
163
163
|
- lib/ears/middleware.rb
|
164
164
|
- lib/ears/middlewares/appsignal.rb
|
165
165
|
- lib/ears/middlewares/json.rb
|
166
|
+
- lib/ears/middlewares/max_retries.rb
|
166
167
|
- lib/ears/setup.rb
|
167
168
|
- lib/ears/version.rb
|
169
|
+
- package-lock.json
|
168
170
|
- package.json
|
169
|
-
- yarn.lock
|
170
171
|
homepage: https://github.com/ivx/ears
|
171
172
|
licenses:
|
172
173
|
- MIT
|
@@ -193,7 +194,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
193
194
|
- !ruby/object:Gem::Version
|
194
195
|
version: '0'
|
195
196
|
requirements: []
|
196
|
-
rubygems_version: 3.2.
|
197
|
+
rubygems_version: 3.2.22
|
197
198
|
signing_key:
|
198
199
|
specification_version: 4
|
199
200
|
summary: A gem for building RabbitMQ consumers.
|
data/yarn.lock
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
2
|
-
# yarn lockfile v1
|
3
|
-
|
4
|
-
|
5
|
-
"@invisionag/prettier-config-ivx@^2.1.1":
|
6
|
-
version "2.1.1"
|
7
|
-
resolved "https://registry.yarnpkg.com/@invisionag/prettier-config-ivx/-/prettier-config-ivx-2.1.1.tgz#8899ec027cfde823ff497f2d67326bc14fbdf4bd"
|
8
|
-
integrity sha512-vujtO8XVSwoWU6k1lRZzvOeMCNvX2injJsEfG5rAfQGBjcN0J4a0zwXYBb6GI4gNZsYj6C6iD1Nk2HsMXKFByg==
|
9
|
-
|
10
|
-
"@prettier/plugin-ruby@^1.5.2":
|
11
|
-
version "1.5.3"
|
12
|
-
resolved "https://registry.yarnpkg.com/@prettier/plugin-ruby/-/plugin-ruby-1.5.3.tgz#04c1058fce59651c38c02ace39faa7a0daa4264b"
|
13
|
-
integrity sha512-YXXf0PGsUOMk40UlfnjDeF3NuRmKE4ddN4L2drFaskhqcB/P9jNGabz5FsGJdJt+ibPxfRsqx05gfxGLZo1wHg==
|
14
|
-
dependencies:
|
15
|
-
prettier ">=1.10"
|
16
|
-
|
17
|
-
prettier@>=1.10, prettier@^2.2.0:
|
18
|
-
version "2.2.1"
|
19
|
-
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5"
|
20
|
-
integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==
|