philotic 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/examples/simple_singleton.rb +2 -2
- data/examples/subscribing/acks.rb +3 -3
- data/examples/subscribing/consumer.rb +4 -4
- data/lib/philotic/consumer.rb +18 -14
- data/lib/philotic/version.rb +1 -1
- data/spec/philotic/consumer_spec.rb +25 -11
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9801556e2c18c1147b0de999eeef96c1b3b00cf4
|
4
|
+
data.tar.gz: d43caf8f1c8aa98e67aec1b0ed11edee9aea22e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3acc57d92689ff4dd1de133e968c26d7321391aab11ff532a1cd3d997f483302ae7920f387cbb7dd351a10516ccee67c596375e485d3188f5feccdf4bf8ae0e0
|
7
|
+
data.tar.gz: 2101fd35dceb87a98ef72e9327bec7497d271428bda282f8c7e58fc61dc2644362f5ebf293f847dd4b649bf58f7f340d94b2f2672bb45af6d5f85642c7e0680c
|
@@ -11,7 +11,7 @@ Philotic.config.message_return_handler = lambda do |basic_return, metadata, mess
|
|
11
11
|
end
|
12
12
|
|
13
13
|
Philotic.subscribe(header_key: 'header_1') do |message|
|
14
|
-
ap
|
14
|
+
ap message.attributes
|
15
15
|
end
|
16
16
|
|
17
17
|
# normally we'd do:
|
@@ -23,5 +23,5 @@ end
|
|
23
23
|
loop do
|
24
24
|
Philotic::Message.publish({header_key: "header_#{[1, 2].sample}"}, {payload_key: 'payload_value'})
|
25
25
|
# only send a message every two seconds so we can see whats going on
|
26
|
-
sleep
|
26
|
+
sleep 0.1
|
27
27
|
end
|
@@ -6,19 +6,19 @@ require 'philotic'
|
|
6
6
|
require 'awesome_print'
|
7
7
|
|
8
8
|
# sometimes ack
|
9
|
-
Philotic.subscribe('flaky_queue',
|
9
|
+
Philotic.subscribe('flaky_queue', manual_ack: true) do |message|
|
10
10
|
ap message.attributes
|
11
11
|
[true, false].sample ? acknowledge(message) : reject(message)
|
12
12
|
end
|
13
13
|
|
14
14
|
# always ack
|
15
|
-
Philotic.subscribe('flaky_queue',
|
15
|
+
Philotic.subscribe('flaky_queue', manual_ack: true) do |message|
|
16
16
|
ap message.attributes
|
17
17
|
acknowledge(message, true)
|
18
18
|
end
|
19
19
|
|
20
20
|
# always reject
|
21
|
-
Philotic.subscribe('flaky_queue',
|
21
|
+
Philotic.subscribe('flaky_queue', manual_ack: true) do |message|
|
22
22
|
ap message.attributes
|
23
23
|
reject message
|
24
24
|
end
|
@@ -10,16 +10,16 @@ class NamedQueueConsumer < Philotic::Consumer
|
|
10
10
|
# subscribe to an existing named queue
|
11
11
|
subscribe_to :test_queue
|
12
12
|
|
13
|
-
#use acknowledgements
|
14
|
-
|
13
|
+
# use acknowledgements
|
14
|
+
auto_acknowledge
|
15
15
|
|
16
16
|
# REQUEUE the message with RabbitMQ if consume throws these errors. I.e., something went wrong with the consumer
|
17
17
|
# Only valid with ack_messages
|
18
|
-
requeueable_errors PossiblyTransientErrorOne, PossiblyTransientErrorTwo
|
18
|
+
# requeueable_errors PossiblyTransientErrorOne, PossiblyTransientErrorTwo
|
19
19
|
|
20
20
|
# REJECT the message with RabbitMQ if consume throws these errors. I.e., The message is malformed/invalid
|
21
21
|
# Only valid with ack_messages
|
22
|
-
rejectable_errors BadMessageError
|
22
|
+
# rejectable_errors BadMessageError
|
23
23
|
|
24
24
|
def consume(message)
|
25
25
|
ap named: message.attributes
|
data/lib/philotic/consumer.rb
CHANGED
@@ -5,7 +5,6 @@ module Philotic
|
|
5
5
|
class Consumer < Philotic::Subscriber
|
6
6
|
|
7
7
|
class << self
|
8
|
-
|
9
8
|
def subscribe_to(subscription)
|
10
9
|
@subscription = subscription
|
11
10
|
end
|
@@ -14,16 +13,24 @@ module Philotic
|
|
14
13
|
@subscription
|
15
14
|
end
|
16
15
|
|
17
|
-
def
|
18
|
-
@
|
16
|
+
def manually_acknowledge
|
17
|
+
@manually_acknowledge = true
|
19
18
|
end
|
20
19
|
|
21
|
-
def
|
22
|
-
|
20
|
+
def manually_acknowledge?
|
21
|
+
!!@manually_acknowledge
|
23
22
|
end
|
24
23
|
|
25
|
-
def
|
26
|
-
|
24
|
+
def auto_acknowledge
|
25
|
+
@auto_acknowledge = true
|
26
|
+
end
|
27
|
+
|
28
|
+
def auto_acknowledge?
|
29
|
+
!!@auto_acknowledge
|
30
|
+
end
|
31
|
+
|
32
|
+
def exclusive
|
33
|
+
@exclusive = true
|
27
34
|
end
|
28
35
|
|
29
36
|
def exclusive?
|
@@ -50,11 +57,11 @@ module Philotic
|
|
50
57
|
|
51
58
|
def subscription_options
|
52
59
|
{
|
53
|
-
manual_ack:
|
60
|
+
manual_ack: auto_acknowledge? || manually_acknowledge?,
|
54
61
|
exclusive: exclusive?,
|
55
62
|
}
|
56
63
|
end
|
57
|
-
end
|
64
|
+
end # end class methods
|
58
65
|
|
59
66
|
def subscribe
|
60
67
|
super(self.class.subscription, self.class.subscription_options) do |message|
|
@@ -69,22 +76,19 @@ module Philotic
|
|
69
76
|
private
|
70
77
|
|
71
78
|
def _consume(message)
|
72
|
-
if self.class.
|
79
|
+
if self.class.auto_acknowledge?
|
73
80
|
begin
|
74
81
|
consume(message)
|
82
|
+
acknowledge(message)
|
75
83
|
rescue => e
|
76
|
-
|
77
84
|
if self.class.requeueable_errors.include? e.class
|
78
85
|
reject(message, true)
|
79
|
-
return
|
80
86
|
elsif self.class.rejectable_errors.include? e.class
|
81
87
|
reject(message, false)
|
82
|
-
return
|
83
88
|
else
|
84
89
|
raise e
|
85
90
|
end
|
86
91
|
end
|
87
|
-
acknowledge(message)
|
88
92
|
else
|
89
93
|
consume(message)
|
90
94
|
end
|
data/lib/philotic/version.rb
CHANGED
@@ -27,11 +27,19 @@ describe Philotic::Consumer do
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
describe '.
|
31
|
-
it 'sets the class variable @
|
32
|
-
expect(subject
|
33
|
-
subject.
|
34
|
-
expect(subject
|
30
|
+
describe '.manually_acknowledge' do
|
31
|
+
it 'sets the class variable @manually_acknowledge' do
|
32
|
+
expect(subject).not_to be_manually_acknowledge
|
33
|
+
subject.manually_acknowledge
|
34
|
+
expect(subject).to be_manually_acknowledge
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe '.auto_acknowledge' do
|
39
|
+
it 'sets the class variable @auto_acknowledge' do
|
40
|
+
expect(subject).not_to be_auto_acknowledge
|
41
|
+
subject.auto_acknowledge
|
42
|
+
expect(subject).to be_auto_acknowledge
|
35
43
|
end
|
36
44
|
end
|
37
45
|
|
@@ -91,7 +99,13 @@ describe Philotic::Consumer do
|
|
91
99
|
it 'returns a hash with the exclusive and manual_ack options' do
|
92
100
|
expect(subject.subscription_options).to match({manual_ack: false, exclusive: false})
|
93
101
|
|
94
|
-
subject.
|
102
|
+
subject.auto_acknowledge
|
103
|
+
expect(subject.subscription_options).to match({manual_ack: true, exclusive: false})
|
104
|
+
|
105
|
+
subject.instance_variable_set(:@auto_acknowledge, nil)
|
106
|
+
expect(subject.subscription_options).to match({manual_ack: false, exclusive: false})
|
107
|
+
|
108
|
+
subject.manually_acknowledge
|
95
109
|
expect(subject.subscription_options).to match({manual_ack: true, exclusive: false})
|
96
110
|
|
97
111
|
subject.exclusive
|
@@ -102,7 +116,7 @@ describe Philotic::Consumer do
|
|
102
116
|
describe '#subscribe' do
|
103
117
|
it 'proxies to Philotic::Subscriber#subscribe' do
|
104
118
|
subject.subscribe_to named_queue
|
105
|
-
subject.
|
119
|
+
subject.auto_acknowledge
|
106
120
|
subject.exclusive
|
107
121
|
|
108
122
|
expect_any_instance_of(Philotic::Subscriber).to receive(:subscribe).with(named_queue, manual_ack: true, exclusive: true)
|
@@ -136,7 +150,7 @@ describe Philotic::Consumer do
|
|
136
150
|
end
|
137
151
|
|
138
152
|
it 'acknowledges messages when @ack_messages is set' do
|
139
|
-
subject.class.
|
153
|
+
subject.class.auto_acknowledge
|
140
154
|
|
141
155
|
subject.define_singleton_method :consume do |message|
|
142
156
|
# no op
|
@@ -148,7 +162,7 @@ describe Philotic::Consumer do
|
|
148
162
|
end
|
149
163
|
|
150
164
|
it 'requeues messages when @ack_messages is set and a requeueable error is thrown' do
|
151
|
-
subject.class.
|
165
|
+
subject.class.auto_acknowledge
|
152
166
|
subject.class.requeueable_errors(RuntimeError)
|
153
167
|
|
154
168
|
subject.define_singleton_method :consume do |message|
|
@@ -161,7 +175,7 @@ describe Philotic::Consumer do
|
|
161
175
|
end
|
162
176
|
|
163
177
|
it 'rejects messages when @ack_messages is set and a rejectable error is thrown' do
|
164
|
-
subject.class.
|
178
|
+
subject.class.auto_acknowledge
|
165
179
|
subject.class.rejectable_errors(RuntimeError)
|
166
180
|
|
167
181
|
subject.define_singleton_method :consume do |message|
|
@@ -174,7 +188,7 @@ describe Philotic::Consumer do
|
|
174
188
|
end
|
175
189
|
|
176
190
|
it 'raises all non-requeueable and non-rejectable errors' do
|
177
|
-
subject.class.
|
191
|
+
subject.class.auto_acknowledge
|
178
192
|
|
179
193
|
subject.define_singleton_method :consume do |message|
|
180
194
|
raise RuntimeError.new 'oops'
|