songkick_queue 0.6.0 → 1.0.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/.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.
|