action_subscriber 2.0.0 → 2.0.1
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/lib/action_subscriber/babou.rb +1 -2
- data/lib/action_subscriber/bunny/subscriber.rb +2 -0
- data/lib/action_subscriber/configuration.rb +3 -1
- data/lib/action_subscriber/march_hare/subscriber.rb +2 -0
- data/lib/action_subscriber/middleware/env.rb +3 -8
- data/lib/action_subscriber/rspec.rb +2 -0
- data/lib/action_subscriber/version.rb +1 -1
- data/spec/integration/custom_actions_spec.rb +24 -0
- data/spec/lib/action_subscriber/configuration_spec.rb +2 -1
- data/spec/lib/action_subscriber/middleware/env_spec.rb +2 -1
- 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: fa7ffc8e113cf3414e95bd9ff2f4271716316da3
|
4
|
+
data.tar.gz: bb9f4b158454c734e75484f8d3fb722ea9817b3d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e3495e8deb06c7ec7540a3cfb0f8080badcbfaa6565e9f1839bdf515c6c557997727e60802f95bca40683db7b5b98d2338eff316575f609c3d2b8616e3503bee
|
7
|
+
data.tar.gz: 2a34bf987ad18fa9b5d8fd852c8148173dbcc5b0bbf94329cd89ccbead8d66c152df1d3a766b9badfbf5baf5ce988a3c99e5c857cb82dc5f152fe8b2e075e661
|
@@ -96,8 +96,7 @@ module ActionSubscriber
|
|
96
96
|
wait_loops = 0
|
97
97
|
::ActionSubscriber::Babou.stop_receving_messages!
|
98
98
|
|
99
|
-
|
100
|
-
while ::ActionSubscriber::Threadpool.pool.busy_size > 0 && wait_loops < 1000
|
99
|
+
while ::ActionSubscriber::Threadpool.pool.busy_size > 0 && wait_loops < ::ActionSubscriber.configuration.seconds_to_wait_for_graceful_shutdown
|
101
100
|
puts "waiting for threadpool to empty (#{::ActionSubscriber::Threadpool.pool.busy_size})"
|
102
101
|
Thread.pass
|
103
102
|
wait_loops = wait_loops + 1
|
@@ -21,6 +21,7 @@ module ActionSubscriber
|
|
21
21
|
next unless encoded_payload # empty queue
|
22
22
|
::ActiveSupport::Notifications.instrument "popped_event.action_subscriber", :payload_size => encoded_payload.bytesize, :queue => queue.name
|
23
23
|
properties = {
|
24
|
+
:action => route.action,
|
24
25
|
:channel => queue.channel,
|
25
26
|
:content_type => properties[:content_type],
|
26
27
|
:delivery_tag => delivery_info.delivery_tag,
|
@@ -44,6 +45,7 @@ module ActionSubscriber
|
|
44
45
|
consumer.on_delivery do |delivery_info, properties, encoded_payload|
|
45
46
|
::ActiveSupport::Notifications.instrument "received_event.action_subscriber", :payload_size => encoded_payload.bytesize, :queue => queue.name
|
46
47
|
properties = {
|
48
|
+
:action => route.action,
|
47
49
|
:channel => queue.channel,
|
48
50
|
:content_type => properties.content_type,
|
49
51
|
:delivery_tag => delivery_info.delivery_tag,
|
@@ -12,6 +12,7 @@ module ActionSubscriber
|
|
12
12
|
:port,
|
13
13
|
:prefetch,
|
14
14
|
:publisher_confirms,
|
15
|
+
:seconds_to_wait_for_graceful_shutdown,
|
15
16
|
:threadpool_size,
|
16
17
|
:timeout,
|
17
18
|
:times_to_pop
|
@@ -25,8 +26,9 @@ module ActionSubscriber
|
|
25
26
|
:mode => 'subscribe',
|
26
27
|
:pop_interval => 100, # in milliseconds
|
27
28
|
:port => 5672,
|
28
|
-
:prefetch =>
|
29
|
+
:prefetch => 5,
|
29
30
|
:publisher_confirms => false,
|
31
|
+
:seconds_to_wait_for_graceful_shutdown => 30,
|
30
32
|
:threadpool_size => 8,
|
31
33
|
:timeout => 1,
|
32
34
|
:times_to_pop => 8
|
@@ -17,6 +17,7 @@ module ActionSubscriber
|
|
17
17
|
next unless encoded_payload
|
18
18
|
::ActiveSupport::Notifications.instrument "popped_event.action_subscriber", :payload_size => encoded_payload.bytesize, :queue => queue.name
|
19
19
|
properties = {
|
20
|
+
:action => route.action,
|
20
21
|
:channel => queue.channel,
|
21
22
|
:content_type => metadata.content_type,
|
22
23
|
:delivery_tag => metadata.delivery_tag,
|
@@ -41,6 +42,7 @@ module ActionSubscriber
|
|
41
42
|
consumer = queue.subscribe(route.queue_subscription_options) do |metadata, encoded_payload|
|
42
43
|
::ActiveSupport::Notifications.instrument "received_event.action_subscriber", :payload_size => encoded_payload.bytesize, :queue => queue.name
|
43
44
|
properties = {
|
45
|
+
:action => route.action,
|
44
46
|
:channel => queue.channel,
|
45
47
|
:content_type => metadata.content_type,
|
46
48
|
:delivery_tag => metadata.delivery_tag,
|
@@ -5,7 +5,8 @@ module ActionSubscriber
|
|
5
5
|
class Env
|
6
6
|
attr_accessor :payload
|
7
7
|
|
8
|
-
attr_reader :
|
8
|
+
attr_reader :action,
|
9
|
+
:content_type,
|
9
10
|
:encoded_payload,
|
10
11
|
:exchange,
|
11
12
|
:headers,
|
@@ -26,6 +27,7 @@ module ActionSubscriber
|
|
26
27
|
# :message_id => String
|
27
28
|
# :routing_key => String
|
28
29
|
def initialize(subscriber, encoded_payload, properties)
|
30
|
+
@action = properties.fetch(:action)
|
29
31
|
@channel = properties.fetch(:channel)
|
30
32
|
@content_type = properties.fetch(:content_type)
|
31
33
|
@delivery_tag = properties.fetch(:delivery_tag)
|
@@ -43,13 +45,6 @@ module ActionSubscriber
|
|
43
45
|
@channel.ack(@delivery_tag, acknowledge_multiple_messages)
|
44
46
|
end
|
45
47
|
|
46
|
-
# Return the last element of the routing key to indicate which action
|
47
|
-
# to route the payload to
|
48
|
-
#
|
49
|
-
def action
|
50
|
-
routing_key.split('.').last.to_s
|
51
|
-
end
|
52
|
-
|
53
48
|
def reject
|
54
49
|
requeue_message = true
|
55
50
|
@channel.reject(@delivery_tag, requeue_message)
|
@@ -13,6 +13,7 @@ module ActionSubscriber
|
|
13
13
|
end
|
14
14
|
|
15
15
|
PROPERTIES_DEFAULTS = {
|
16
|
+
:action => :created,
|
16
17
|
:channel => FakeChannel.new,
|
17
18
|
:content_type => "text/plain",
|
18
19
|
:delivery_tag => "XYZ",
|
@@ -71,6 +72,7 @@ end
|
|
71
72
|
let(:app) { Proc.new { |inner_env| inner_env } }
|
72
73
|
let(:env) { ActionSubscriber::Middleware::Env.new(UserSubscriber, 'encoded payload', message_properties) }
|
73
74
|
let(:message_properties) {{
|
75
|
+
:action => :created,
|
74
76
|
:channel => ::ActionSubscriber::RSpec::FakeChannel.new,
|
75
77
|
:content_type => "text/plain",
|
76
78
|
:delivery_tag => "XYZ",
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class CustomActionSubscriber < ActionSubscriber::Base
|
2
|
+
def wat
|
3
|
+
$messages << payload
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
describe "A subscriber with a custom action", :integration => true do
|
8
|
+
let(:draw_routes) do
|
9
|
+
::ActionSubscriber.draw_routes do
|
10
|
+
route ::CustomActionSubscriber, :wat,
|
11
|
+
:queue => "unrelated_to_the_action",
|
12
|
+
:routing_key => "*.javascript_framework"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
it "routes the message to the selected action" do
|
17
|
+
::ActionSubscriber.auto_subscribe!
|
18
|
+
::ActionSubscriber::Publisher.publish("react.javascript_framework", "Another?!?!", "events")
|
19
|
+
|
20
|
+
verify_expectation_within(2.0) do
|
21
|
+
expect($messages).to eq(Set.new(["Another?!?!"]))
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -7,7 +7,8 @@ describe ::ActionSubscriber::Configuration do
|
|
7
7
|
specify { expect(subject.mode).to eq('subscribe') }
|
8
8
|
specify { expect(subject.pop_interval).to eq(100) }
|
9
9
|
specify { expect(subject.port).to eq(5672) }
|
10
|
-
specify { expect(subject.prefetch).to eq(
|
10
|
+
specify { expect(subject.prefetch).to eq(5) }
|
11
|
+
specify { expect(subject.seconds_to_wait_for_graceful_shutdown).to eq(30) }
|
11
12
|
specify { expect(subject.threadpool_size).to eq(8) }
|
12
13
|
specify { expect(subject.timeout).to eq(1) }
|
13
14
|
specify { expect(subject.times_to_pop).to eq(8) }
|
@@ -2,6 +2,7 @@ describe ActionSubscriber::Middleware::Env do
|
|
2
2
|
let(:channel) { double("channel") }
|
3
3
|
let(:encoded_payload) { 'encoded_payload' }
|
4
4
|
let(:properties){ {
|
5
|
+
:action => :created,
|
5
6
|
:channel => channel,
|
6
7
|
:content_type => "application/json",
|
7
8
|
:delivery_tag => "XYZ",
|
@@ -16,7 +17,7 @@ describe ActionSubscriber::Middleware::Env do
|
|
16
17
|
|
17
18
|
subject { described_class.new(subscriber, encoded_payload, properties) }
|
18
19
|
|
19
|
-
specify { expect(subject.action).to eq(
|
20
|
+
specify { expect(subject.action).to eq(:created) }
|
20
21
|
specify { expect(subject.content_type).to eq(properties[:content_type]) }
|
21
22
|
specify { expect(subject.exchange).to eq(properties[:exchange]) }
|
22
23
|
specify { expect(subject.headers).to eq(properties[:headers]) }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: action_subscriber
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Stien
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2016-01-
|
15
|
+
date: 2016-01-26 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: activesupport
|
@@ -229,6 +229,7 @@ files:
|
|
229
229
|
- spec/integration/at_most_once_spec.rb
|
230
230
|
- spec/integration/automatic_reconnect_spec.rb
|
231
231
|
- spec/integration/basic_subscriber_spec.rb
|
232
|
+
- spec/integration/custom_actions_spec.rb
|
232
233
|
- spec/integration/custom_headers_spec.rb
|
233
234
|
- spec/integration/decoding_payloads_spec.rb
|
234
235
|
- spec/integration/inferred_routes_spec.rb
|
@@ -281,6 +282,7 @@ test_files:
|
|
281
282
|
- spec/integration/at_most_once_spec.rb
|
282
283
|
- spec/integration/automatic_reconnect_spec.rb
|
283
284
|
- spec/integration/basic_subscriber_spec.rb
|
285
|
+
- spec/integration/custom_actions_spec.rb
|
284
286
|
- spec/integration/custom_headers_spec.rb
|
285
287
|
- spec/integration/decoding_payloads_spec.rb
|
286
288
|
- spec/integration/inferred_routes_spec.rb
|