freddy 1.5.0 → 1.6.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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c2c342119c1a4c330673258a8c5dbeb5d33ea15bc06ddbe261e1cfb8485829fe
|
4
|
+
data.tar.gz: a66de9b5b4f97ff58e1f8a321daa5846526a68c41fb4d7e4121d0c90fed55101
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fa9f61272f5f792c2e944ad39d2604693a14950d0a7bef43f3fcba8d3865ce0ff992877bc27427d66aa29314e1b6ae1fc6acde15e1f513169fbe49a1cc1c496a
|
7
|
+
data.tar.gz: '0678e4121e3eaaa5669d5d5ef4963c91a31ace9f605ecaf1050136f98a3df1c3b6e24b6709e5abaed8b530c21f89695b18d6ed7c5ab7f6543e47e254abd01b18'
|
data/freddy.gemspec
CHANGED
@@ -34,7 +34,7 @@ class Freddy
|
|
34
34
|
@channel = channel
|
35
35
|
end
|
36
36
|
|
37
|
-
def_delegators :@channel, :topic, :default_exchange, :consumers, :acknowledge
|
37
|
+
def_delegators :@channel, :topic, :default_exchange, :consumers, :acknowledge, :reject
|
38
38
|
|
39
39
|
def queue(*args)
|
40
40
|
Queue.new(@channel.queue(*args))
|
@@ -33,7 +33,7 @@ class Freddy
|
|
33
33
|
@channel = channel
|
34
34
|
end
|
35
35
|
|
36
|
-
def_delegators :@channel, :topic, :default_exchange, :consumers, :acknowledge
|
36
|
+
def_delegators :@channel, :topic, :default_exchange, :consumers, :acknowledge, :reject
|
37
37
|
|
38
38
|
def queue(*args)
|
39
39
|
Queue.new(@channel.queue(*args))
|
@@ -12,6 +12,8 @@ class Freddy
|
|
12
12
|
@pattern = pattern
|
13
13
|
@channel = channel
|
14
14
|
@options = options
|
15
|
+
|
16
|
+
raise 'Do not use durable queues without specifying a group' if durable? && !group
|
15
17
|
end
|
16
18
|
|
17
19
|
def consume(&block)
|
@@ -28,11 +30,10 @@ class Freddy
|
|
28
30
|
|
29
31
|
def create_queue
|
30
32
|
topic_exchange = @channel.topic(Freddy::FREDDY_TOPIC_EXCHANGE_NAME)
|
31
|
-
group = @options.fetch(:group, nil)
|
32
33
|
|
33
34
|
if group
|
34
35
|
@channel
|
35
|
-
.queue("groups.#{group}")
|
36
|
+
.queue("groups.#{group}", durable: durable?)
|
36
37
|
.bind(topic_exchange, routing_key: @pattern)
|
37
38
|
else
|
38
39
|
@channel
|
@@ -54,12 +55,36 @@ class Freddy
|
|
54
55
|
force_follows_from: true)
|
55
56
|
|
56
57
|
yield delivery.payload, delivery.routing_key
|
58
|
+
|
59
|
+
@channel.acknowledge(delivery.tag)
|
60
|
+
rescue StandardError
|
61
|
+
case on_exception
|
62
|
+
when :reject
|
63
|
+
@channel.reject(delivery.tag)
|
64
|
+
when :requeue
|
65
|
+
@channel.reject(delivery.tag, true)
|
66
|
+
else
|
67
|
+
@channel.acknowledge(delivery.tag)
|
68
|
+
end
|
69
|
+
|
70
|
+
raise
|
57
71
|
ensure
|
58
|
-
@channel.acknowledge(delivery.tag, false)
|
59
72
|
scope.close
|
60
73
|
end
|
61
74
|
end
|
62
75
|
end
|
76
|
+
|
77
|
+
def group
|
78
|
+
@options.fetch(:group, nil)
|
79
|
+
end
|
80
|
+
|
81
|
+
def durable?
|
82
|
+
@options.fetch(:durable, false)
|
83
|
+
end
|
84
|
+
|
85
|
+
def on_exception
|
86
|
+
@options.fetch(:on_exception, :ack)
|
87
|
+
end
|
63
88
|
end
|
64
89
|
end
|
65
90
|
end
|
data/lib/freddy.rb
CHANGED
@@ -111,6 +111,15 @@ class Freddy
|
|
111
111
|
# @option options [String] :group
|
112
112
|
# only one of the listeners in given group will receive a message. All
|
113
113
|
# listeners will receive a message if the group is not specified.
|
114
|
+
# @option options [Boolean] :durable
|
115
|
+
# Should the consumer queue be durable? Default is `false`. This option can
|
116
|
+
# be used only in combination with option `:group`.
|
117
|
+
# @option options [Boolean] :on_exception
|
118
|
+
# Defines consumer's behaviour when the callback fails to process a message
|
119
|
+
# and raises an exception. Can be one of `:ack`, `:reject` or `:requeue`.
|
120
|
+
# `:ack` simply acknowledges the message and re-raises the exception. `:reject`
|
121
|
+
# rejects the message without requeueing it. `:requeue` rejects the message with
|
122
|
+
# `requeue` flag.
|
114
123
|
#
|
115
124
|
# @yield [message] Yields received message to the block
|
116
125
|
#
|
@@ -10,6 +10,11 @@ describe 'Tapping into with group identifier' do
|
|
10
10
|
|
11
11
|
after { [deliverer, responder1, responder2].each(&:close) }
|
12
12
|
|
13
|
+
it 'raises an exception if option :durable is provided without group' do
|
14
|
+
expect { responder1.tap_into(destination, durable: true) }
|
15
|
+
.to raise_error(RuntimeError)
|
16
|
+
end
|
17
|
+
|
13
18
|
it 'receives a message once' do
|
14
19
|
msg_counter = Hamster::MutableSet[]
|
15
20
|
|
@@ -21,4 +26,18 @@ describe 'Tapping into with group identifier' do
|
|
21
26
|
default_sleep
|
22
27
|
expect(msg_counter.count).to eq(1)
|
23
28
|
end
|
29
|
+
|
30
|
+
it 'can requeue message on exception' do
|
31
|
+
counter = 0
|
32
|
+
|
33
|
+
responder1.tap_into(destination, group: arbitrary_id, on_exception: :requeue) do
|
34
|
+
counter += 1
|
35
|
+
raise 'error' if counter == 1
|
36
|
+
end
|
37
|
+
|
38
|
+
deliverer.deliver(destination, {})
|
39
|
+
|
40
|
+
wait_for { counter == 2 }
|
41
|
+
expect(counter).to eq(2)
|
42
|
+
end
|
24
43
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: freddy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Salemove TechMovers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-05-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -169,7 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
169
169
|
version: '0'
|
170
170
|
requirements: []
|
171
171
|
rubyforge_project:
|
172
|
-
rubygems_version: 2.6
|
172
|
+
rubygems_version: 2.7.6
|
173
173
|
signing_key:
|
174
174
|
specification_version: 4
|
175
175
|
summary: API for inter-application messaging supporting acknowledgements and request-response
|