multiple_man 1.4.0 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +0 -20
- data/lib/multiple_man/consumers/general.rb +1 -1
- data/lib/multiple_man/runner.rb +0 -15
- data/lib/multiple_man/tasks/worker.rake +0 -25
- data/lib/multiple_man/version.rb +1 -1
- data/spec/consumers/general_spec.rb +1 -1
- data/spec/consumers/seed_spec.rb +1 -1
- data/spec/runner_spec.rb +17 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8b0b5340cba015cfbf0a2a43f04283743415bf2f
|
4
|
+
data.tar.gz: 541a5bc2ba571cc2d915508b6ba12e70c58a9e14
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ef57043bd9b127e7418b5f6935ed3589d71919f1a740b4d658a0d04e9025af6d73fb467a5414d6b44cd8a2340f1ff2efe18de6ecf25fa63731506c21dcdfe63
|
7
|
+
data.tar.gz: 192d47727ed9dd2b881351d9eac3eb2c0fcc66e145ef56f9dcbb07f7b71cbb4257a25e7afbc2a9ac6ebf240424d4c142e3a740877cd0e62bb3aea7da874c81bd
|
data/README.md
CHANGED
@@ -195,26 +195,6 @@ MyModel.multiple_man_publish(:seed)
|
|
195
195
|
|
196
196
|
3. Stop the seeder rake task when all of your messages have been processed. You can check your RabbitMQ server
|
197
197
|
|
198
|
-
## Upgrading to 1.0
|
199
|
-
|
200
|
-
The major change is that MultipleMan will no longer create a queue per listener.
|
201
|
-
There is only 1 queue that will have multiple bindings to the exchange so that
|
202
|
-
you have a chance to maintain causal consistency.
|
203
|
-
|
204
|
-
Assuming you are using vanilla MultipleMan you will need to run both the
|
205
|
-
regular worker and the new 'transition_worker' for a short period. The
|
206
|
-
transitional worker will connect to your old queues, unbind them and allow them
|
207
|
-
to drain. Once the queues are empty you can safely shut the transitional worker
|
208
|
-
down and delete the old queues.
|
209
|
-
|
210
|
-
So for example if you use a Procfile:
|
211
|
-
|
212
|
-
```
|
213
|
-
multiple_man_worker: rake multiple_man:worker
|
214
|
-
# Temporary until old queues are drained
|
215
|
-
transition_worker: rake multiple_man:transition_worker
|
216
|
-
```
|
217
|
-
|
218
198
|
## Contributing
|
219
199
|
|
220
200
|
1. Fork it
|
@@ -14,7 +14,7 @@ module MultipleMan
|
|
14
14
|
MultipleMan.logger.debug "Starting listeners."
|
15
15
|
create_bindings
|
16
16
|
|
17
|
-
queue.subscribe(manual_ack: true) do |delivery_info, meta_data, payload|
|
17
|
+
queue.subscribe(block: true, manual_ack: true) do |delivery_info, meta_data, payload|
|
18
18
|
MultipleMan.logger.debug "Processing message for #{delivery_info.routing_key}."
|
19
19
|
message = JSON.parse(payload).with_indifferent_access
|
20
20
|
receive(delivery_info, meta_data, message)
|
data/lib/multiple_man/runner.rb
CHANGED
@@ -1,19 +1,6 @@
|
|
1
1
|
require 'forwardable'
|
2
2
|
|
3
3
|
module MultipleMan
|
4
|
-
def self.trap_signals!
|
5
|
-
return if @signals_trapped
|
6
|
-
|
7
|
-
@signals_trapped = true
|
8
|
-
|
9
|
-
handler = proc do |signal|
|
10
|
-
puts "received #{Signal.signame(signal)}"
|
11
|
-
exit
|
12
|
-
end
|
13
|
-
|
14
|
-
%w(INT QUIT TERM).each { |signal| Signal.trap(signal, handler) }
|
15
|
-
end
|
16
|
-
|
17
4
|
class Runner
|
18
5
|
extend Forwardable
|
19
6
|
|
@@ -26,11 +13,9 @@ module MultipleMan
|
|
26
13
|
end
|
27
14
|
|
28
15
|
def run
|
29
|
-
MultipleMan.trap_signals!
|
30
16
|
preload_framework!
|
31
17
|
channel.prefetch(prefetch_size)
|
32
18
|
build_listener.listen
|
33
|
-
sleep
|
34
19
|
end
|
35
20
|
|
36
21
|
private
|
@@ -8,29 +8,4 @@ namespace :multiple_man do
|
|
8
8
|
task seed: :environment do
|
9
9
|
MultipleMan::Runner.new(mode: :seed).run
|
10
10
|
end
|
11
|
-
|
12
|
-
desc 'Run transitional worker'
|
13
|
-
task transition_worker: :environment do
|
14
|
-
Rails.application.eager_load! if defined?(Rails)
|
15
|
-
|
16
|
-
topic = MultipleMan.configuration.topic_name
|
17
|
-
app_name = MultipleMan.configuration.app_name
|
18
|
-
channel = MultipleMan::Connection.connection.create_channel
|
19
|
-
channel.prefetch(MultipleMan.configuration.prefetch_size)
|
20
|
-
|
21
|
-
MultipleMan.configuration.listeners.each do |listener|
|
22
|
-
queue_name = listener.respond_to?(:queue_name) ?
|
23
|
-
listener.queue_name :
|
24
|
-
"#{topic}.#{app_name}.#{listener.listen_to}"
|
25
|
-
|
26
|
-
next unless MultipleMan::Connection.connection.queue_exists?(queue_name)
|
27
|
-
queue = channel.queue(queue_name, durable: true, auto_delete: false)
|
28
|
-
|
29
|
-
MultipleMan::Consumers::Transitional.new(subscription: listener, queue: queue, topic: topic).listen
|
30
|
-
end
|
31
|
-
|
32
|
-
MultipleMan.trap_signals!
|
33
|
-
sleep
|
34
|
-
end
|
35
|
-
|
36
11
|
end
|
data/lib/multiple_man/version.rb
CHANGED
@@ -29,7 +29,7 @@ describe MultipleMan::Consumers::General do
|
|
29
29
|
|
30
30
|
expect(queue).to receive(:bind).with('some-topic', routing_key: subscriptions.first.routing_key).ordered
|
31
31
|
expect(queue).to receive(:bind).with('some-topic', routing_key: subscriptions.last.routing_key).ordered
|
32
|
-
expect(queue).to receive(:subscribe).with(manual_ack: true).ordered
|
32
|
+
expect(queue).to receive(:subscribe).with(block: true, manual_ack: true).ordered
|
33
33
|
|
34
34
|
subject = described_class.new(subscribers: subscriptions, queue: queue, topic: 'some-topic')
|
35
35
|
|
data/spec/consumers/seed_spec.rb
CHANGED
@@ -17,7 +17,7 @@ describe MultipleMan::Consumers::Seed do
|
|
17
17
|
queue = double(Bunny::Queue, channel: channel)
|
18
18
|
|
19
19
|
expect(queue).to receive(:bind).with('some-topic', routing_key: "multiple_man.seed.SomeClass")
|
20
|
-
expect(queue).to receive(:subscribe).with(manual_ack: true)
|
20
|
+
expect(queue).to receive(:subscribe).with(block: true, manual_ack: true)
|
21
21
|
|
22
22
|
subject = described_class.new(subscribers: [listener1.new], queue: queue, topic: 'some-topic')
|
23
23
|
subject.listen
|
data/spec/runner_spec.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MultipleMan::Runner do
|
4
|
+
let(:mock_channel) { double("Channel", prefetch: true, queue: true) }
|
5
|
+
let(:mock_connection) { double("Connection", create_channel: mock_channel) }
|
6
|
+
let(:mock_consumer) { double("Consumer", listen: true) }
|
7
|
+
|
8
|
+
it 'boots app and listens on new channel' do
|
9
|
+
expect(MultipleMan::Connection).to receive(:connection).and_return(mock_connection)
|
10
|
+
expect(MultipleMan::Consumers::General).to receive(:new).and_return(mock_consumer)
|
11
|
+
|
12
|
+
expect(mock_consumer).to receive(:listen)
|
13
|
+
|
14
|
+
runner = described_class.new(mode: :general)
|
15
|
+
runner.run
|
16
|
+
end
|
17
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: multiple_man
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Brunner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-06-
|
11
|
+
date: 2017-06-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bunny
|
@@ -153,6 +153,7 @@ files:
|
|
153
153
|
- spec/model_publisher_spec.rb
|
154
154
|
- spec/payload_generator_spec.rb
|
155
155
|
- spec/routing_key_spec.rb
|
156
|
+
- spec/runner_spec.rb
|
156
157
|
- spec/spec_helper.rb
|
157
158
|
- spec/subscribers/base_spec.rb
|
158
159
|
- spec/subscribers/model_subscriber_spec.rb
|
@@ -198,6 +199,7 @@ test_files:
|
|
198
199
|
- spec/model_publisher_spec.rb
|
199
200
|
- spec/payload_generator_spec.rb
|
200
201
|
- spec/routing_key_spec.rb
|
202
|
+
- spec/runner_spec.rb
|
201
203
|
- spec/spec_helper.rb
|
202
204
|
- spec/subscribers/base_spec.rb
|
203
205
|
- spec/subscribers/model_subscriber_spec.rb
|