bunny 1.4.1 → 1.5.0.pre1
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/.gitignore +1 -0
- data/.travis.yml +1 -1
- data/ChangeLog.md +19 -5
- data/README.md +23 -3
- data/examples/guides/extensions/basic_nack.rb +1 -1
- data/examples/guides/extensions/dead_letter_exchange.rb +1 -1
- data/examples/guides/queues/redeliveries.rb +2 -2
- data/lib/bunny.rb +1 -1
- data/lib/bunny/channel.rb +34 -21
- data/lib/bunny/exceptions.rb +17 -2
- data/lib/bunny/exchange.rb +14 -22
- data/lib/bunny/queue.rb +19 -12
- data/lib/bunny/session.rb +67 -57
- data/lib/bunny/version.rb +1 -1
- data/spec/config/enabled_plugins +1 -0
- data/spec/config/rabbitmq.config +18 -0
- data/spec/higher_level_api/integration/basic_ack_spec.rb +29 -2
- data/spec/higher_level_api/integration/basic_consume_with_objects_spec.rb +1 -1
- data/spec/higher_level_api/integration/basic_nack_spec.rb +5 -5
- data/spec/higher_level_api/integration/basic_reject_spec.rb +3 -3
- data/spec/higher_level_api/integration/connection_recovery_spec.rb +79 -2
- data/spec/higher_level_api/integration/connection_spec.rb +24 -0
- data/spec/higher_level_api/integration/dead_lettering_spec.rb +1 -1
- data/spec/higher_level_api/integration/exchange_unbind_spec.rb +1 -1
- data/spec/higher_level_api/integration/message_properties_access_spec.rb +1 -1
- data/spec/issues/issue78_spec.rb +2 -2
- data/spec/spec_helper.rb +6 -7
- data/spec/tls/ca_certificate.pem +18 -0
- data/spec/tls/ca_key.pem +27 -0
- data/spec/tls/client_cert.pem +16 -16
- data/spec/tls/client_key.pem +25 -25
- data/spec/tls/server_cert.pem +16 -16
- data/spec/tls/server_key.pem +25 -25
- metadata +12 -10
- data/.ruby-version +0 -1
- data/lib/bunny/compatibility.rb +0 -24
- data/spec/compatibility/queue_declare_spec.rb +0 -44
- data/spec/compatibility/queue_declare_with_default_channel_spec.rb +0 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f2e3f4cbc8cb08e8cebce0b4ae4b87056744fcf4
|
4
|
+
data.tar.gz: 17d65911fb9a606ea5d5f7b9af0f21dd811266bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d16bfeab544fb842e3030bf1aa6fd7e7ed4a97966577934f45b8d5988e2fbd4d33125a1c601c8a44d6ef150b3707df52da07d5ff6519c64a461bdaad1869d6ed
|
7
|
+
data.tar.gz: 53766bae9993a4e3b5d064101d28023c435ea19ad051f2b05050674b1609fc4e7efbf644852630b2a7b58ddab362cde94d8360ce1d637d528ea83ed7350eb63d
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/ChangeLog.md
CHANGED
@@ -1,11 +1,25 @@
|
|
1
|
-
## Changes between Bunny 1.4.0 and 1.
|
1
|
+
## Changes between Bunny 1.4.0 and 1.5.0
|
2
2
|
|
3
|
-
###
|
3
|
+
### Convenience Method for Temporary (Server-named, Exclusive) Queue Declaration
|
4
4
|
|
5
|
-
Bunny
|
6
|
-
|
5
|
+
`Bunny::Channel#temporary_queue` is a convenience method that declares a new
|
6
|
+
server-named exclusive queue:
|
7
7
|
|
8
|
-
|
8
|
+
``` ruby
|
9
|
+
q = ch.temporary_queue
|
10
|
+
```
|
11
|
+
|
12
|
+
Contributed by Daniel Schierbeck (Zendesk).
|
13
|
+
|
14
|
+
|
15
|
+
### Host Lists
|
16
|
+
|
17
|
+
It is now possible to pass the `:hosts` option to `Bunny.new`/`Bunny::Session#initialize`.
|
18
|
+
When connection to RabbitMQ (including during connection recovery), a random host
|
19
|
+
will be chosen from the list.
|
20
|
+
|
21
|
+
Connection shuffling and robustness improvements are contributed by
|
22
|
+
Andre Foeken (Nedap).
|
9
23
|
|
10
24
|
|
11
25
|
## Changes between Bunny 1.3.0 and 1.4.0
|
data/README.md
CHANGED
@@ -64,11 +64,11 @@ Bunny `0.7.x` and earlier versions support RabbitMQ 1.x and 2.x.
|
|
64
64
|
|
65
65
|
## Project Maturity
|
66
66
|
|
67
|
-
Bunny is a mature library (started in early 2009)
|
67
|
+
Bunny is a mature library (started in early 2009) with
|
68
68
|
a stable public API.
|
69
69
|
|
70
70
|
Before version 0.9, **a lot** of functionality was missing. Version
|
71
|
-
0.9 can be considered to be "second birthday" for Bunny as it was
|
71
|
+
0.9 can be considered to be a "second birthday" for Bunny as it was
|
72
72
|
rewritten from scratch with over a dozen of preview releases over the
|
73
73
|
course of about a year.
|
74
74
|
|
@@ -95,7 +95,7 @@ gem install bunny
|
|
95
95
|
To use Bunny in a project managed with Bundler:
|
96
96
|
|
97
97
|
``` ruby
|
98
|
-
gem "bunny", "~> 1.
|
98
|
+
gem "bunny", "~> 1.4.0"
|
99
99
|
```
|
100
100
|
|
101
101
|
|
@@ -191,6 +191,26 @@ try to explain what behavior you expected and why. Bonus points for
|
|
191
191
|
contributing failing test cases.
|
192
192
|
|
193
193
|
|
194
|
+
### Running the specs
|
195
|
+
|
196
|
+
The cleanest way to get the specs running is by starting a clean rabbitmq server
|
197
|
+
node on your machine specifically for the bunny specs.
|
198
|
+
|
199
|
+
Make sure you have a recent version of RabbitMQ (> 3.2) and run the following command
|
200
|
+
from the base directory of the gem:
|
201
|
+
|
202
|
+
`RABBITMQ_NODENAME=bunny RABBITMQ_CONFIG_FILE=./spec/config/rabbitmq RABBITMQ_ENABLED_PLUGINS_FILE=./spec/config/enabled_plugins rabbitmq-server`
|
203
|
+
|
204
|
+
> The specs use the Rabbitmq management plugin and require an SSL port to be available. The config files in the spec/config directory enable these. Please note that this config uses verify_none because the certificates are expired.
|
205
|
+
|
206
|
+
Next up you'll need to prepare your node for the specs (Only once):
|
207
|
+
|
208
|
+
`RABBITMQ_NODENAME=bunny ./bin/ci/before_build.sh`
|
209
|
+
|
210
|
+
And then run the specs:
|
211
|
+
|
212
|
+
`RABBITMQ_NODENAME=bunny rspec`
|
213
|
+
|
194
214
|
## Other Ruby RabbitMQ Clients
|
195
215
|
|
196
216
|
Other widely used Ruby RabbitMQ clients are [March
|
@@ -20,7 +20,7 @@ dlq = ch.queue("", :exclusive => true).bind(dlx)
|
|
20
20
|
x.publish("")
|
21
21
|
sleep 0.2
|
22
22
|
|
23
|
-
delivery_info, _, _ = q.pop(:
|
23
|
+
delivery_info, _, _ = q.pop(:manual_ack => true)
|
24
24
|
puts "#{dlq.message_count} messages dead lettered so far"
|
25
25
|
puts "Rejecting a message"
|
26
26
|
ch.nack(delivery_info.delivery_tag)
|
@@ -29,7 +29,7 @@ x = ch3.direct("amq.direct")
|
|
29
29
|
q1 = ch1.queue("bunny.examples.acknowledgements.explicit", :auto_delete => false)
|
30
30
|
q1.purge
|
31
31
|
|
32
|
-
q1.bind(x).subscribe(:
|
32
|
+
q1.bind(x).subscribe(:manual_ack => true, :block => false) do |delivery_info, properties, payload|
|
33
33
|
# do some work
|
34
34
|
sleep(0.2)
|
35
35
|
|
@@ -46,7 +46,7 @@ q1.bind(x).subscribe(:ack => true, :block => false) do |delivery_info, propertie
|
|
46
46
|
end
|
47
47
|
|
48
48
|
q2 = ch2.queue("bunny.examples.acknowledgements.explicit", :auto_delete => false)
|
49
|
-
q2.bind(x).subscribe(:
|
49
|
+
q2.bind(x).subscribe(:manual_ack => true, :block => false) do |delivery_info, properties, payload|
|
50
50
|
# do some work
|
51
51
|
sleep(0.2)
|
52
52
|
|
data/lib/bunny.rb
CHANGED
data/lib/bunny/channel.rb
CHANGED
@@ -37,11 +37,10 @@ module Bunny
|
|
37
37
|
# Channels can be opened either via `Bunny::Session#create_channel` (sufficient in the majority
|
38
38
|
# of cases) or by instantiating `Bunny::Channel` directly:
|
39
39
|
#
|
40
|
-
#
|
41
|
-
#
|
42
|
-
# conn.start
|
40
|
+
# conn = Bunny.new
|
41
|
+
# conn.start
|
43
42
|
#
|
44
|
-
#
|
43
|
+
# ch = conn.create_channel
|
45
44
|
#
|
46
45
|
# This will automatically allocate a channel id.
|
47
46
|
#
|
@@ -51,10 +50,8 @@ module Bunny
|
|
51
50
|
# closed, too. Closed channels can no longer be used. Attempts to use them will raise
|
52
51
|
# {Bunny::ChannelAlreadyClosed}.
|
53
52
|
#
|
54
|
-
#
|
55
|
-
#
|
56
|
-
# ch = conn.create_channel
|
57
|
-
# ch.close
|
53
|
+
# ch = conn.create_channel
|
54
|
+
# ch.close
|
58
55
|
#
|
59
56
|
# ## Higher-level API
|
60
57
|
#
|
@@ -404,6 +401,16 @@ module Bunny
|
|
404
401
|
register_queue(q)
|
405
402
|
end
|
406
403
|
|
404
|
+
# Declares a new server-named queue that is automatically deleted when the
|
405
|
+
# connection is closed.
|
406
|
+
#
|
407
|
+
# @return [Bunny::Queue] Queue that was declared
|
408
|
+
# @see #queue
|
409
|
+
# @api public
|
410
|
+
def temporary_queue(opts = {})
|
411
|
+
queue("", opts.merge(:exclusive => true))
|
412
|
+
end
|
413
|
+
|
407
414
|
# @endgroup
|
408
415
|
|
409
416
|
|
@@ -566,7 +573,8 @@ module Bunny
|
|
566
573
|
# @param [String] queue Queue name
|
567
574
|
# @param [Hash] opts Options
|
568
575
|
#
|
569
|
-
# @option opts [Boolean] :ack (true)
|
576
|
+
# @option opts [Boolean] :ack (true) [DEPRECATED] Use :manual_ack instead
|
577
|
+
# @option opts [Boolean] :manual_ack (true) Will this message be acknowledged manually?
|
570
578
|
#
|
571
579
|
# @return [Array] A triple of delivery info, message properties and message content
|
572
580
|
#
|
@@ -575,15 +583,20 @@ module Bunny
|
|
575
583
|
# conn.start
|
576
584
|
# ch = conn.create_channel
|
577
585
|
# # here we assume the queue already exists and has messages
|
578
|
-
# delivery_info, properties, payload = ch.basic_get("bunny.examples.queue1", :
|
586
|
+
# delivery_info, properties, payload = ch.basic_get("bunny.examples.queue1", :manual_ack => true)
|
579
587
|
# ch.acknowledge(delivery_info.delivery_tag)
|
580
588
|
# @see Bunny::Queue#pop
|
581
589
|
# @see http://rubybunny.info/articles/queues.html Queues and Consumers guide
|
582
590
|
# @api public
|
583
|
-
def basic_get(queue, opts = {:
|
591
|
+
def basic_get(queue, opts = {:manual_ack => true})
|
584
592
|
raise_if_no_longer_open!
|
585
593
|
|
586
|
-
|
594
|
+
unless opts[:ack].nil?
|
595
|
+
warn "[DEPRECATION] `:ack` is deprecated. Please use `:manual_ack` instead."
|
596
|
+
opts[:manual_ack] = opts[:ack]
|
597
|
+
end
|
598
|
+
|
599
|
+
@connection.send_frame(AMQ::Protocol::Basic::Get.encode(@id, queue, !(opts[:manual_ack])))
|
587
600
|
# this is a workaround for the edge case when basic_get is called in a tight loop
|
588
601
|
# and network goes down we need to perform recovery. The problem is, basic_get will
|
589
602
|
# keep blocking the thread that calls it without clear way to constantly unblock it
|
@@ -675,7 +688,7 @@ module Bunny
|
|
675
688
|
#
|
676
689
|
# ch = conn.create_channel
|
677
690
|
# # we assume the queue exists and has messages
|
678
|
-
# delivery_info, properties, payload = ch.basic_get("bunny.examples.queue3", :
|
691
|
+
# delivery_info, properties, payload = ch.basic_get("bunny.examples.queue3", :manual_ack => true)
|
679
692
|
# ch.basic_reject(delivery_info.delivery_tag, true)
|
680
693
|
#
|
681
694
|
# @see Bunny::Channel#basic_nack
|
@@ -710,7 +723,7 @@ module Bunny
|
|
710
723
|
#
|
711
724
|
# ch = conn.create_channel
|
712
725
|
# # we assume the queue exists and has messages
|
713
|
-
# delivery_info, properties, payload = ch.basic_get("bunny.examples.queue3", :
|
726
|
+
# delivery_info, properties, payload = ch.basic_get("bunny.examples.queue3", :manual_ack => true)
|
714
727
|
# ch.basic_ack(delivery_info.delivery_tag)
|
715
728
|
#
|
716
729
|
# @example Ack multiple messages fetched via basic.get
|
@@ -719,9 +732,9 @@ module Bunny
|
|
719
732
|
#
|
720
733
|
# ch = conn.create_channel
|
721
734
|
# # we assume the queue exists and has messages
|
722
|
-
# _, _, payload1 = ch.basic_get("bunny.examples.queue3", :
|
723
|
-
# _, _, payload2 = ch.basic_get("bunny.examples.queue3", :
|
724
|
-
# delivery_info, properties, payload3 = ch.basic_get("bunny.examples.queue3", :
|
735
|
+
# _, _, payload1 = ch.basic_get("bunny.examples.queue3", :manual_ack => true)
|
736
|
+
# _, _, payload2 = ch.basic_get("bunny.examples.queue3", :manual_ack => true)
|
737
|
+
# delivery_info, properties, payload3 = ch.basic_get("bunny.examples.queue3", :manual_ack => true)
|
725
738
|
# # ack all fetched messages up to payload3
|
726
739
|
# ch.basic_ack(delivery_info.delivery_tag, true)
|
727
740
|
#
|
@@ -769,7 +782,7 @@ module Bunny
|
|
769
782
|
#
|
770
783
|
# ch = conn.create_channel
|
771
784
|
# # we assume the queue exists and has messages
|
772
|
-
# delivery_info, properties, payload = ch.basic_get("bunny.examples.queue3", :
|
785
|
+
# delivery_info, properties, payload = ch.basic_get("bunny.examples.queue3", :manual_ack => true)
|
773
786
|
# ch.basic_nack(delivery_info.delivery_tag, false, true)
|
774
787
|
#
|
775
788
|
#
|
@@ -779,9 +792,9 @@ module Bunny
|
|
779
792
|
#
|
780
793
|
# ch = conn.create_channel
|
781
794
|
# # we assume the queue exists and has messages
|
782
|
-
# _, _, payload1 = ch.basic_get("bunny.examples.queue3", :
|
783
|
-
# _, _, payload2 = ch.basic_get("bunny.examples.queue3", :
|
784
|
-
# delivery_info, properties, payload3 = ch.basic_get("bunny.examples.queue3", :
|
795
|
+
# _, _, payload1 = ch.basic_get("bunny.examples.queue3", :manual_ack => true)
|
796
|
+
# _, _, payload2 = ch.basic_get("bunny.examples.queue3", :manual_ack => true)
|
797
|
+
# delivery_info, properties, payload3 = ch.basic_get("bunny.examples.queue3", :manual_ack => true)
|
785
798
|
# # requeue all fetched messages up to payload3
|
786
799
|
# ch.basic_nack(delivery_info.delivery_tag, true, true)
|
787
800
|
#
|
data/lib/bunny/exceptions.rb
CHANGED
@@ -4,6 +4,12 @@ module Bunny
|
|
4
4
|
class Exception < ::StandardError
|
5
5
|
end
|
6
6
|
|
7
|
+
class HostListDepleted < Exception
|
8
|
+
def initialize
|
9
|
+
super("No more hosts to try in the supplied list of hosts")
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
7
13
|
# Indicates a network failure. If automatic network
|
8
14
|
# recovery mode is enabled, these will be typically handled
|
9
15
|
# by the client itself.
|
@@ -54,7 +60,6 @@ module Bunny
|
|
54
60
|
end
|
55
61
|
end
|
56
62
|
|
57
|
-
|
58
63
|
# Raised when TCP connection to RabbitMQ fails because of an unresolved
|
59
64
|
# hostname, connectivity problem, etc
|
60
65
|
class TCPConnectionFailed < Exception
|
@@ -67,7 +72,17 @@ module Bunny
|
|
67
72
|
when Exception then
|
68
73
|
e.message
|
69
74
|
end
|
70
|
-
|
75
|
+
if hostname && port
|
76
|
+
super("Could not establish TCP connection to #{hostname}:#{port}: #{m}")
|
77
|
+
else
|
78
|
+
super(m)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
class TCPConnectionFailedForAllHosts < TCPConnectionFailed
|
84
|
+
def initialize
|
85
|
+
super("Could not establish TCP connection to any of the configured hosts", nil, nil)
|
71
86
|
end
|
72
87
|
end
|
73
88
|
|
data/lib/bunny/exchange.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require "bunny/compatibility"
|
2
|
-
|
3
1
|
module Bunny
|
4
2
|
# Represents AMQP 0.9.1 exchanges.
|
5
3
|
#
|
@@ -7,9 +5,6 @@ module Bunny
|
|
7
5
|
# @see http://rubybunny.info/articles/extensions.html RabbitMQ Extensions guide
|
8
6
|
class Exchange
|
9
7
|
|
10
|
-
include Bunny::Compatibility
|
11
|
-
|
12
|
-
|
13
8
|
#
|
14
9
|
# API
|
15
10
|
#
|
@@ -33,12 +28,12 @@ module Bunny
|
|
33
28
|
attr_accessor :opts
|
34
29
|
|
35
30
|
|
36
|
-
# The default exchange.
|
37
|
-
#
|
38
|
-
# the following routing semantics: messages will be routed to the queue
|
39
|
-
#
|
40
|
-
# a routing key of "weather.usa.ca.sandiego" and there is a queue
|
41
|
-
#
|
31
|
+
# The default exchange. This exchange is a direct exchange that is predefined by the broker
|
32
|
+
# and that cannot be removed. Every queue is bound to this exchange by default with
|
33
|
+
# the following routing semantics: messages will be routed to the queue with the same
|
34
|
+
# name as the message's routing key. In other words, if a message is published with
|
35
|
+
# a routing key of "weather.usa.ca.sandiego" and there is a queue with this name,
|
36
|
+
# the message will be routed to the queue.
|
42
37
|
#
|
43
38
|
# @param [Bunny::Channel] channel_or_connection Channel to use. {Bunny::Session} instances
|
44
39
|
# are only supported for backwards compatibility.
|
@@ -46,11 +41,11 @@ module Bunny
|
|
46
41
|
# @example Publishing a messages to the tasks queue
|
47
42
|
# channel = Bunny::Channel.new(connection)
|
48
43
|
# tasks_queue = channel.queue("tasks")
|
49
|
-
# Bunny::Exchange.default(channel).publish("make clean", routing_key => "tasks")
|
44
|
+
# Bunny::Exchange.default(channel).publish("make clean", :routing_key => "tasks")
|
50
45
|
#
|
51
46
|
# @see http://rubybunny.info/articles/exchanges.html Exchanges and Publishing guide
|
52
47
|
# @see http://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf AMQP 0.9.1 specification (Section 2.1.2.4)
|
53
|
-
# @note Do not confuse default exchange with amq.direct: amq.direct is a pre-defined direct
|
48
|
+
# @note Do not confuse the default exchange with amq.direct: amq.direct is a pre-defined direct
|
54
49
|
# exchange that doesn't have any special routing semantics.
|
55
50
|
# @return [Exchange] An instance that corresponds to the default exchange (of type direct).
|
56
51
|
# @api public
|
@@ -58,11 +53,10 @@ module Bunny
|
|
58
53
|
self.new(channel_or_connection, :direct, AMQ::Protocol::EMPTY_STRING, :no_declare => true)
|
59
54
|
end
|
60
55
|
|
61
|
-
# @param [Bunny::Channel]
|
62
|
-
#
|
63
|
-
# @param [
|
64
|
-
# @param [
|
65
|
-
# @param [Hash] opts Exchange properties
|
56
|
+
# @param [Bunny::Channel] channel Channel this exchange will use.
|
57
|
+
# @param [Symbol,String] type Exchange type
|
58
|
+
# @param [String] name Exchange name
|
59
|
+
# @param [Hash] opts Exchange properties
|
66
60
|
#
|
67
61
|
# @option opts [Boolean] :durable (false) Should this exchange be durable?
|
68
62
|
# @option opts [Boolean] :auto_delete (false) Should this exchange be automatically deleted when it is no longer used?
|
@@ -75,10 +69,8 @@ module Bunny
|
|
75
69
|
# @see http://rubybunny.info/articles/exchanges.html Exchanges and Publishing guide
|
76
70
|
# @see http://rubybunny.info/articles/extensions.html RabbitMQ Extensions guide
|
77
71
|
# @api public
|
78
|
-
def initialize(
|
79
|
-
|
80
|
-
# we just use default channel from it. MK.
|
81
|
-
@channel = channel_from(channel_or_connection)
|
72
|
+
def initialize(channel, type, name, opts = {})
|
73
|
+
@channel = channel
|
82
74
|
@name = name
|
83
75
|
@type = type
|
84
76
|
@options = self.class.add_default_options(name, opts)
|
data/lib/bunny/queue.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require "bunny/compatibility"
|
2
1
|
require "bunny/get_response"
|
3
2
|
|
4
3
|
module Bunny
|
@@ -8,9 +7,6 @@ module Bunny
|
|
8
7
|
# @see http://rubybunny.info/articles/extensions.html RabbitMQ Extensions guide
|
9
8
|
class Queue
|
10
9
|
|
11
|
-
include Bunny::Compatibility
|
12
|
-
|
13
|
-
|
14
10
|
#
|
15
11
|
# API
|
16
12
|
#
|
@@ -22,8 +18,7 @@ module Bunny
|
|
22
18
|
# @return [Hash] Options this queue was created with
|
23
19
|
attr_reader :options
|
24
20
|
|
25
|
-
# @param [Bunny::Channel]
|
26
|
-
# backwards compatibility with 0.8.
|
21
|
+
# @param [Bunny::Channel] channel Channel this queue will use.
|
27
22
|
# @param [String] name Queue name. Pass an empty string to make RabbitMQ generate a unique one.
|
28
23
|
# @param [Hash] opts Queue properties
|
29
24
|
#
|
@@ -36,10 +31,10 @@ module Bunny
|
|
36
31
|
# @see http://rubybunny.info/articles/queues.html Queues and Consumers guide
|
37
32
|
# @see http://rubybunny.info/articles/extensions.html RabbitMQ Extensions guide
|
38
33
|
# @api public
|
39
|
-
def initialize(
|
34
|
+
def initialize(channel, name = AMQ::Protocol::EMPTY_STRING, opts = {})
|
40
35
|
# old Bunny versions pass a connection here. In that case,
|
41
36
|
# we just use default channel from it. MK.
|
42
|
-
@channel =
|
37
|
+
@channel = channel
|
43
38
|
@name = name
|
44
39
|
@options = self.class.add_default_options(name, opts)
|
45
40
|
@consumers = Hash.new
|
@@ -152,6 +147,7 @@ module Bunny
|
|
152
147
|
#
|
153
148
|
# @param [Hash] opts Options
|
154
149
|
#
|
150
|
+
# @option opts [Boolean] :ack (false) [DEPRECATED] Use :manual_ack instead
|
155
151
|
# @option opts [Boolean] :manual_ack (false) Will this consumer use manual acknowledgements?
|
156
152
|
# @option opts [Boolean] :exclusive (false) Should this consumer be exclusive for this queue?
|
157
153
|
# @option opts [Boolean] :block (false) Should the call block calling thread?
|
@@ -163,17 +159,22 @@ module Bunny
|
|
163
159
|
# @api public
|
164
160
|
def subscribe(opts = {
|
165
161
|
:consumer_tag => @channel.generate_consumer_tag,
|
166
|
-
:
|
162
|
+
:manual_ack => false,
|
167
163
|
:exclusive => false,
|
168
164
|
:block => false,
|
169
165
|
:on_cancellation => nil
|
170
166
|
}, &block)
|
171
167
|
|
168
|
+
unless opts[:ack].nil?
|
169
|
+
warn "[DEPRECATION] `:ack` is deprecated. Please use `:manual_ack` instead."
|
170
|
+
opts[:manual_ack] = opts[:ack]
|
171
|
+
end
|
172
|
+
|
172
173
|
ctag = opts.fetch(:consumer_tag, @channel.generate_consumer_tag)
|
173
174
|
consumer = Consumer.new(@channel,
|
174
175
|
self,
|
175
176
|
ctag,
|
176
|
-
!
|
177
|
+
!opts[:manual_ack],
|
177
178
|
opts[:exclusive],
|
178
179
|
opts[:arguments])
|
179
180
|
|
@@ -208,7 +209,8 @@ module Bunny
|
|
208
209
|
|
209
210
|
# @param [Hash] opts Options
|
210
211
|
#
|
211
|
-
# @option opts [Boolean] :ack (false)
|
212
|
+
# @option opts [Boolean] :ack (false) [DEPRECATED] Use :manual_ack instead
|
213
|
+
# @option opts [Boolean] :manual_ack (false) Will the message be acknowledged manually?
|
212
214
|
#
|
213
215
|
# @return [Array] Triple of delivery info, message properties and message content.
|
214
216
|
# If the queue is empty, all three will be nils.
|
@@ -229,7 +231,12 @@ module Bunny
|
|
229
231
|
#
|
230
232
|
# puts "This is the message: " + payload + "\n\n"
|
231
233
|
# conn.close
|
232
|
-
def pop(opts = {:
|
234
|
+
def pop(opts = {:manual_ack => false}, &block)
|
235
|
+
unless opts[:ack].nil?
|
236
|
+
warn "[DEPRECATION] `:ack` is deprecated. Please use `:manual_ack` instead."
|
237
|
+
opts[:manual_ack] = opts[:ack]
|
238
|
+
end
|
239
|
+
|
233
240
|
get_response, properties, content = @channel.basic_get(@name, opts)
|
234
241
|
|
235
242
|
if block
|