songkick_queue 0.6.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +2 -3
- data/CHANGELOG.md +7 -0
- data/README.md +2 -2
- data/lib/songkick_queue.rb +2 -0
- data/lib/songkick_queue/version.rb +1 -1
- data/lib/songkick_queue/worker.rb +3 -1
- data/spec/songkick_queue/worker_spec.rb +34 -9
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 80c905f63588a612193bdeaade449945a882915d
|
4
|
+
data.tar.gz: 9efbed0c8e48ab683f5d3a201ce5f185a64b4cd8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 35eb58b4c453ca4a5516e675d3753bd6a8ee7d9cb4c543f0999b8050b329c681c0e58eb8a4eca8b3de7edd443a11527132e2631fc2ceab6bae1f4ac27dc10dfc
|
7
|
+
data.tar.gz: 50c7cc654906e5fa6544ffed3ebb4cb924b885df011a86dabca80cc0faef97ec28fbf8c03dab82abc1be9dc2c968209caff4cffc909ce03049d0c2b30e7f2b0f
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 1.0.0
|
4
|
+
### Added
|
5
|
+
- Configuration option: `requeue_rejected_messages`
|
6
|
+
|
7
|
+
### Changed
|
8
|
+
- Changed default consumer behaviour for errors; we now reject on failure and re-queue according to new config option `requeue_rejected_messages` (defaults to false)
|
9
|
+
|
3
10
|
## 0.6.0
|
4
11
|
### Added
|
5
12
|
- Instrumentation (for tracking metrics using statsd or other tools)
|
data/README.md
CHANGED
@@ -42,6 +42,7 @@ SongkickQueue.configure do |config|
|
|
42
42
|
config.vhost = '/'
|
43
43
|
config.max_reconnect_attempts = 10
|
44
44
|
config.network_recovery_interval = 1.0
|
45
|
+
config.requeue_rejected_messages = false
|
45
46
|
end
|
46
47
|
```
|
47
48
|
|
@@ -170,8 +171,7 @@ $ open http://localhost:8808/
|
|
170
171
|
|
171
172
|
## TODO
|
172
173
|
|
173
|
-
*
|
174
|
-
* Look at adding #requeue and #reject methods in consumer mixin
|
174
|
+
* Requeue and reject from within consumers
|
175
175
|
|
176
176
|
## Contributing
|
177
177
|
|
data/lib/songkick_queue.rb
CHANGED
@@ -22,6 +22,7 @@ module SongkickQueue
|
|
22
22
|
:vhost,
|
23
23
|
:max_reconnect_attempts,
|
24
24
|
:network_recovery_interval,
|
25
|
+
:requeue_rejected_messages,
|
25
26
|
)
|
26
27
|
|
27
28
|
TooManyReconnectAttemptsError = Class.new(StandardError)
|
@@ -35,6 +36,7 @@ module SongkickQueue
|
|
35
36
|
config.port = 5672
|
36
37
|
config.max_reconnect_attempts = 10
|
37
38
|
config.network_recovery_interval = 1.0
|
39
|
+
config.requeue_rejected_messages = false
|
38
40
|
end
|
39
41
|
end
|
40
42
|
|
@@ -103,9 +103,11 @@ module SongkickQueue
|
|
103
103
|
end
|
104
104
|
rescue Object => exception
|
105
105
|
logger.error(exception)
|
106
|
+
channel.reject(delivery_info.delivery_tag, config.requeue_rejected_messages)
|
107
|
+
else
|
108
|
+
channel.ack(delivery_info.delivery_tag, false)
|
106
109
|
ensure
|
107
110
|
set_process_name
|
108
|
-
channel.ack(delivery_info.delivery_tag, false)
|
109
111
|
end
|
110
112
|
|
111
113
|
def channel
|
@@ -65,24 +65,26 @@ module SongkickQueue
|
|
65
65
|
end
|
66
66
|
|
67
67
|
describe "#process_message" do
|
68
|
-
|
68
|
+
let(:worker) { Worker.new(:process_name, BarConsumer) }
|
69
|
+
let(:logger) { double(:logger, info: :null) }
|
70
|
+
let(:channel) { double(:channel, ack: :null, reject: :null) }
|
71
|
+
let(:delivery_info) { double(:delivery_info, delivery_tag: 'tag') }
|
72
|
+
let(:consumer) { double(BarConsumer, process: :null) }
|
73
|
+
let(:config) { double(:config, requeue_rejected_messages: true) }
|
74
|
+
|
75
|
+
before do
|
69
76
|
::BarConsumer = Struct.new(:delivery_info, :logger) do
|
70
77
|
def self.queue_name
|
71
78
|
"bar-queue"
|
72
79
|
end
|
73
80
|
end
|
74
|
-
worker = Worker.new(:process_name, BarConsumer)
|
75
81
|
|
76
|
-
logger = double(:logger, info: :null)
|
77
82
|
allow(worker).to receive(:logger) { logger }
|
78
|
-
|
79
|
-
channel = double(:channel, ack: :null)
|
80
83
|
allow(worker).to receive(:channel) { channel }
|
84
|
+
allow(worker).to receive(:config) { config }
|
85
|
+
end
|
81
86
|
|
82
|
-
|
83
|
-
|
84
|
-
consumer = double(BarConsumer, process: :null)
|
85
|
-
|
87
|
+
it "should instantiate the consumer and call #process" do
|
86
88
|
expect(BarConsumer).to receive(:new)
|
87
89
|
.with(delivery_info, logger) { consumer }
|
88
90
|
|
@@ -95,9 +97,32 @@ module SongkickQueue
|
|
95
97
|
|
96
98
|
expect(logger).to have_received(:info)
|
97
99
|
.with('Processing message 92c583bdc248 via BarConsumer, produced at 2015-03-30T15:41:55Z')
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should acknowedge the message if it is successful" do
|
103
|
+
expect(BarConsumer).to receive(:new)
|
104
|
+
.with(delivery_info, logger) { consumer }
|
105
|
+
|
106
|
+
worker.send(:process_message, BarConsumer, delivery_info, :properties,
|
107
|
+
'{"message_id":"92c583bdc248","produced_at":"2015-03-30T15:41:55Z",' +
|
108
|
+
'"payload":{"example":"message","value":true}}')
|
98
109
|
|
99
110
|
expect(channel).to have_received(:ack).with('tag', false)
|
100
111
|
end
|
112
|
+
|
113
|
+
it "should reject and re-queue the message if it is not successful" do
|
114
|
+
expect(BarConsumer).to receive(:new)
|
115
|
+
.with(delivery_info, logger) { consumer }
|
116
|
+
|
117
|
+
allow(consumer).to receive(:process) { raise RuntimeError, "test error" }
|
118
|
+
expect(logger).to receive(:error).with(instance_of(RuntimeError))
|
119
|
+
|
120
|
+
worker.send(:process_message, BarConsumer, delivery_info, :properties,
|
121
|
+
'{"message_id":"92c583bdc248","produced_at":"2015-03-30T15:41:55Z",' +
|
122
|
+
'"payload":{"example":"message","value":true}}')
|
123
|
+
|
124
|
+
expect(channel).to have_received(:reject).with('tag', true)
|
125
|
+
end
|
101
126
|
end
|
102
127
|
end
|
103
128
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: songkick_queue
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Lucraft
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2016-09-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -150,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
150
150
|
version: '0'
|
151
151
|
requirements: []
|
152
152
|
rubyforge_project:
|
153
|
-
rubygems_version: 2.
|
153
|
+
rubygems_version: 2.5.1
|
154
154
|
signing_key:
|
155
155
|
specification_version: 4
|
156
156
|
summary: A gem for processing tasks asynchronously, powered by RabbitMQ.
|