bunny 0.5.3 → 0.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.
- data/{README → README.rdoc} +9 -2
- data/bunny.gemspec +12 -7
- data/examples/simple_08.rb +1 -1
- data/examples/simple_09.rb +1 -1
- data/examples/simple_ack_08.rb +1 -1
- data/examples/simple_ack_09.rb +1 -1
- data/examples/simple_consumer_08.rb +6 -14
- data/examples/simple_consumer_09.rb +6 -14
- data/examples/simple_fanout_08.rb +2 -2
- data/examples/simple_fanout_09.rb +2 -2
- data/examples/simple_headers_08.rb +1 -1
- data/examples/simple_headers_09.rb +1 -1
- data/examples/simple_topic_08.rb +4 -4
- data/examples/simple_topic_09.rb +4 -4
- data/lib/bunny.rb +23 -15
- data/lib/bunny/channel08.rb +8 -2
- data/lib/bunny/channel09.rb +8 -2
- data/lib/bunny/client08.rb +67 -24
- data/lib/bunny/client09.rb +88 -48
- data/lib/bunny/exchange08.rb +55 -43
- data/lib/bunny/exchange09.rb +67 -54
- data/lib/bunny/queue08.rb +79 -137
- data/lib/bunny/queue09.rb +79 -141
- data/lib/bunny/subscription08.rb +85 -0
- data/lib/bunny/subscription09.rb +85 -0
- data/lib/qrack/client.rb +29 -10
- data/lib/qrack/protocol/spec08.rb +1 -0
- data/lib/qrack/protocol/spec09.rb +1 -0
- data/lib/qrack/qrack08.rb +1 -0
- data/lib/qrack/qrack09.rb +1 -0
- data/lib/qrack/queue.rb +1 -1
- data/lib/qrack/subscription.rb +102 -0
- data/spec/spec_08/bunny_spec.rb +6 -0
- data/spec/spec_08/connection_spec.rb +12 -0
- data/spec/spec_08/exchange_spec.rb +19 -3
- data/spec/spec_08/queue_spec.rb +87 -13
- data/spec/spec_09/bunny_spec.rb +7 -1
- data/spec/spec_09/connection_spec.rb +12 -0
- data/spec/spec_09/exchange_spec.rb +19 -3
- data/spec/spec_09/queue_spec.rb +94 -21
- metadata +11 -6
data/{README → README.rdoc}
RENAMED
@@ -1,9 +1,14 @@
|
|
1
1
|
= Bunny: A synchronous Ruby AMQP client
|
2
2
|
|
3
3
|
*GitHub* *repo*: http://github.com/celldee/bunny
|
4
|
+
|
4
5
|
*Rubyforge*: http://rubyforge.org/projects/bunny-amqp
|
6
|
+
|
5
7
|
*Twitter*: http://twitter.com/bunny_amqp
|
8
|
+
|
6
9
|
*Google* *Group*: http://groups.google.com/group/bunny-amqp
|
10
|
+
|
11
|
+
*Blog*: http://bunnyamqp.wordpress.com
|
7
12
|
|
8
13
|
=== DESCRIPTION:
|
9
14
|
|
@@ -23,7 +28,9 @@ Bunny is known to work with RabbitMQ versions 1.5.4, 1.5.5, 1.6.0 and version 0-
|
|
23
28
|
|
24
29
|
*Rubyforge*: <tt>gem install bunny</tt>
|
25
30
|
|
26
|
-
*
|
31
|
+
*Gemcutter*: <tt>gem install bunny</tt>
|
32
|
+
|
33
|
+
*GitHub*: Current gem is not available.
|
27
34
|
|
28
35
|
=== QUICK START:
|
29
36
|
|
@@ -41,7 +48,7 @@ Bunny is known to work with RabbitMQ versions 1.5.4, 1.5.5, 1.6.0 and version 0-
|
|
41
48
|
q.publish('Hello everybody!')
|
42
49
|
|
43
50
|
# get message from the queue
|
44
|
-
msg = q.pop
|
51
|
+
msg = q.pop[:payload]
|
45
52
|
|
46
53
|
puts 'This is the message: ' + msg + "\n\n"
|
47
54
|
|
data/bunny.gemspec
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = %q{bunny}
|
3
|
-
s.version = "0.
|
3
|
+
s.version = "0.6.0"
|
4
4
|
s.authors = ["Chris Duncan"]
|
5
|
-
s.date = %q{2009-
|
5
|
+
s.date = %q{2009-10-05}
|
6
6
|
s.description = %q{Another synchronous Ruby AMQP client}
|
7
7
|
s.email = %q{celldee@gmail.com}
|
8
8
|
s.rubyforge_project = %q{bunny-amqp}
|
9
9
|
s.has_rdoc = true
|
10
|
-
s.extra_rdoc_files = [ "README" ]
|
11
|
-
s.rdoc_options = [ "--main", "README" ]
|
10
|
+
s.extra_rdoc_files = [ "README.rdoc" ]
|
11
|
+
s.rdoc_options = [ "--main", "README.rdoc" ]
|
12
12
|
s.homepage = %q{http://github.com/celldee/bunny/tree/master}
|
13
13
|
s.summary = %q{A synchronous Ruby AMQP client that enables interaction with AMQP-compliant brokers/servers.}
|
14
14
|
s.files = ["LICENSE",
|
15
|
-
"README",
|
15
|
+
"README.rdoc",
|
16
16
|
"Rakefile",
|
17
17
|
"bunny.gemspec",
|
18
18
|
"examples/simple_08.rb",
|
@@ -38,9 +38,12 @@ Gem::Specification.new do |s|
|
|
38
38
|
"lib/bunny/exchange09.rb",
|
39
39
|
"lib/bunny/queue08.rb",
|
40
40
|
"lib/bunny/queue09.rb",
|
41
|
+
"lib/bunny/subscription08.rb",
|
42
|
+
"lib/bunny/subscription09.rb",
|
41
43
|
"lib/qrack/client.rb",
|
42
44
|
"lib/qrack/channel.rb",
|
43
45
|
"lib/qrack/queue.rb",
|
46
|
+
"lib/qrack/subscription.rb",
|
44
47
|
"lib/qrack/protocol/protocol08.rb",
|
45
48
|
"lib/qrack/protocol/protocol09.rb",
|
46
49
|
"lib/qrack/protocol/spec08.rb",
|
@@ -54,7 +57,9 @@ Gem::Specification.new do |s|
|
|
54
57
|
"spec/spec_08/bunny_spec.rb",
|
55
58
|
"spec/spec_08/exchange_spec.rb",
|
56
59
|
"spec/spec_08/queue_spec.rb",
|
60
|
+
"spec/spec_08/connection_spec.rb",
|
57
61
|
"spec/spec_09/bunny_spec.rb",
|
58
62
|
"spec/spec_09/exchange_spec.rb",
|
59
|
-
"spec/spec_09/queue_spec.rb"
|
60
|
-
|
63
|
+
"spec/spec_09/queue_spec.rb",
|
64
|
+
"spec/spec_09/connection_spec.rb"]
|
65
|
+
end
|
data/examples/simple_08.rb
CHANGED
data/examples/simple_09.rb
CHANGED
data/examples/simple_ack_08.rb
CHANGED
data/examples/simple_ack_09.rb
CHANGED
@@ -44,18 +44,10 @@ exch = b.exchange('sorting_room')
|
|
44
44
|
# bind queue to exchange
|
45
45
|
q.bind(exch, :key => 'fred')
|
46
46
|
|
47
|
-
# initialize counter
|
48
|
-
i = 1
|
49
|
-
|
50
47
|
# subscribe to queue
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
puts '==== simple_consumer_08.rb timed out - closing down ===='
|
58
|
-
q.unsubscribe(:consumer_tag => 'testtag1')
|
59
|
-
# close the connection
|
60
|
-
b.stop
|
61
|
-
end
|
48
|
+
q.subscribe(:consumer_tag => 'testtag1', :timeout => 30) do |msg|
|
49
|
+
puts "#{q.subscription.message_count}: #{msg[:payload]}"
|
50
|
+
end
|
51
|
+
|
52
|
+
# Close client
|
53
|
+
b.stop
|
@@ -44,18 +44,10 @@ exch = b.exchange('sorting_room')
|
|
44
44
|
# bind queue to exchange
|
45
45
|
q.bind(exch, :key => 'fred')
|
46
46
|
|
47
|
-
# initialize counter
|
48
|
-
i = 1
|
49
|
-
|
50
47
|
# subscribe to queue
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
puts '==== simple_consumer_09.rb timed out - closing down ===='
|
58
|
-
q.unsubscribe(:consumer_tag => 'testtag1')
|
59
|
-
# close the connection
|
60
|
-
b.stop
|
61
|
-
end
|
48
|
+
q.subscribe(:consumer_tag => 'testtag1', :timeout => 30) do |msg|
|
49
|
+
puts "#{q.subscription.message_count}: #{msg[:payload]}"
|
50
|
+
end
|
51
|
+
|
52
|
+
# Close client
|
53
|
+
b.stop
|
@@ -30,9 +30,9 @@ q2.bind(exch)
|
|
30
30
|
exch.publish('This message will be fanned out')
|
31
31
|
|
32
32
|
# get message from the queues
|
33
|
-
msg = q1.pop
|
33
|
+
msg = q1.pop[:payload]
|
34
34
|
puts 'This is the message from q1: ' + msg + "\n\n"
|
35
|
-
msg = q2.pop
|
35
|
+
msg = q2.pop[:payload]
|
36
36
|
puts 'This is the message from q2: ' + msg + "\n\n"
|
37
37
|
|
38
38
|
# close the client connection
|
@@ -30,9 +30,9 @@ q2.bind(exch)
|
|
30
30
|
exch.publish('This message will be fanned out')
|
31
31
|
|
32
32
|
# get message from the queues
|
33
|
-
msg = q1.pop
|
33
|
+
msg = q1.pop[:payload]
|
34
34
|
puts 'This is the message from q1: ' + msg + "\n\n"
|
35
|
-
msg = q2.pop
|
35
|
+
msg = q2.pop[:payload]
|
36
36
|
puts 'This is the message from q2: ' + msg + "\n\n"
|
37
37
|
|
38
38
|
# close the client connection
|
@@ -32,7 +32,7 @@ header_exch.publish('Headers test msg 2', :headers => {'h1'=>'z'})
|
|
32
32
|
# get messages from the queue - should only be msg 1 that got through
|
33
33
|
msg = ""
|
34
34
|
until msg == :queue_empty do
|
35
|
-
msg = q.pop
|
35
|
+
msg = q.pop[:payload]
|
36
36
|
puts 'This is a message from the header_q1 queue: ' + msg + "\n" unless msg == :queue_empty
|
37
37
|
end
|
38
38
|
|
@@ -32,7 +32,7 @@ header_exch.publish('Headers test msg 2', :headers => {'h1'=>'z'})
|
|
32
32
|
# get messages from the queue - should only be msg 1 that got through
|
33
33
|
msg = ""
|
34
34
|
until msg == :queue_empty do
|
35
|
-
msg = q.pop
|
35
|
+
msg = q.pop[:payload]
|
36
36
|
puts 'This is a message from the header_q1 queue: ' + msg + "\n" unless msg == :queue_empty
|
37
37
|
end
|
38
38
|
|
data/examples/simple_topic_08.rb
CHANGED
@@ -38,20 +38,20 @@ sports_results.publish('British Lions 15 : South Africa 12', :key => 'rugby.resu
|
|
38
38
|
# get message from the queues
|
39
39
|
|
40
40
|
# soccer queue got the soccer message
|
41
|
-
msg = soccer.pop
|
41
|
+
msg = soccer.pop[:payload]
|
42
42
|
puts 'This is a message from the soccer q: ' + msg + "\n\n"
|
43
43
|
|
44
44
|
# cricket queue got the cricket message
|
45
|
-
msg = cricket.pop
|
45
|
+
msg = cricket.pop[:payload]
|
46
46
|
puts 'This is a message from the cricket q: ' + msg + "\n\n"
|
47
47
|
|
48
48
|
# rugby queue got the rugby message
|
49
|
-
msg = rugby.pop
|
49
|
+
msg = rugby.pop[:payload]
|
50
50
|
puts 'This is a message from the rugby q: ' + msg + "\n\n"
|
51
51
|
|
52
52
|
# allsport queue got all of the messages
|
53
53
|
until msg == :queue_empty do
|
54
|
-
msg = allsport.pop
|
54
|
+
msg = allsport.pop[:payload]
|
55
55
|
puts 'This is a message from the allsport q: ' + msg + "\n\n" unless msg == :queue_empty
|
56
56
|
end
|
57
57
|
|
data/examples/simple_topic_09.rb
CHANGED
@@ -38,20 +38,20 @@ sports_results.publish('British Lions 15 : South Africa 12', :key => 'rugby.resu
|
|
38
38
|
# get message from the queues
|
39
39
|
|
40
40
|
# soccer queue got the soccer message
|
41
|
-
msg = soccer.pop
|
41
|
+
msg = soccer.pop[:payload]
|
42
42
|
puts 'This is a message from the soccer q: ' + msg + "\n\n"
|
43
43
|
|
44
44
|
# cricket queue got the cricket message
|
45
|
-
msg = cricket.pop
|
45
|
+
msg = cricket.pop[:payload]
|
46
46
|
puts 'This is a message from the cricket q: ' + msg + "\n\n"
|
47
47
|
|
48
48
|
# rugby queue got the rugby message
|
49
|
-
msg = rugby.pop
|
49
|
+
msg = rugby.pop[:payload]
|
50
50
|
puts 'This is a message from the rugby q: ' + msg + "\n\n"
|
51
51
|
|
52
52
|
# allsport queue got all of the messages
|
53
53
|
until msg == :queue_empty do
|
54
|
-
msg = allsport.pop
|
54
|
+
msg = allsport.pop[:payload]
|
55
55
|
puts 'This is a message from the allsport q: ' + msg + "\n\n" unless msg == :queue_empty
|
56
56
|
end
|
57
57
|
|
data/lib/bunny.rb
CHANGED
@@ -7,12 +7,16 @@ end
|
|
7
7
|
|
8
8
|
module Bunny
|
9
9
|
|
10
|
-
class ProtocolError < StandardError; end
|
11
|
-
class ServerDownError < StandardError; end
|
12
10
|
class ConnectionError < StandardError; end
|
11
|
+
class ForcedChannelCloseError < StandardError; end
|
12
|
+
class ForcedConnectionCloseError < StandardError; end
|
13
13
|
class MessageError < StandardError; end
|
14
|
+
class ProtocolError < StandardError; end
|
15
|
+
class ServerDownError < StandardError; end
|
16
|
+
class UnsubscribeError < StandardError; end
|
17
|
+
class AcknowledgementError < StandardError; end
|
14
18
|
|
15
|
-
VERSION = '0.
|
19
|
+
VERSION = '0.6.0'
|
16
20
|
|
17
21
|
# Returns the Bunny version number
|
18
22
|
|
@@ -25,10 +29,9 @@ module Bunny
|
|
25
29
|
def self.new(opts = {})
|
26
30
|
# Set up Bunny according to AMQP spec version required
|
27
31
|
spec_version = opts[:spec] || '08'
|
28
|
-
|
29
|
-
|
32
|
+
|
30
33
|
# Return client
|
31
|
-
|
34
|
+
setup(spec_version, opts)
|
32
35
|
end
|
33
36
|
|
34
37
|
# Runs a code block using a short-lived connection
|
@@ -38,13 +41,14 @@ module Bunny
|
|
38
41
|
|
39
42
|
# Set up Bunny according to AMQP spec version required
|
40
43
|
spec_version = opts[:spec] || '08'
|
41
|
-
setup(spec_version, opts)
|
44
|
+
client = setup(spec_version, opts)
|
42
45
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
46
|
+
begin
|
47
|
+
client.start
|
48
|
+
block.call(client)
|
49
|
+
ensure
|
50
|
+
client.stop
|
51
|
+
end
|
48
52
|
|
49
53
|
# Return success
|
50
54
|
:run_ok
|
@@ -60,8 +64,9 @@ module Bunny
|
|
60
64
|
require 'bunny/exchange08'
|
61
65
|
require 'bunny/queue08'
|
62
66
|
require 'bunny/channel08'
|
67
|
+
require 'bunny/subscription08'
|
63
68
|
|
64
|
-
|
69
|
+
client = Bunny::Client.new(opts)
|
65
70
|
else
|
66
71
|
# AMQP 0-9-1 specification
|
67
72
|
require 'qrack/qrack09'
|
@@ -69,11 +74,14 @@ module Bunny
|
|
69
74
|
require 'bunny/exchange09'
|
70
75
|
require 'bunny/queue09'
|
71
76
|
require 'bunny/channel09'
|
77
|
+
require 'bunny/subscription09'
|
72
78
|
|
73
|
-
|
79
|
+
client = Bunny::Client09.new(opts)
|
74
80
|
end
|
75
81
|
|
76
82
|
include Qrack
|
83
|
+
|
84
|
+
client
|
77
85
|
end
|
78
86
|
|
79
|
-
end
|
87
|
+
end
|
data/lib/bunny/channel08.rb
CHANGED
@@ -8,7 +8,10 @@ module Bunny
|
|
8
8
|
def open
|
9
9
|
client.channel = self
|
10
10
|
client.send_frame(Qrack::Protocol::Channel::Open.new)
|
11
|
-
|
11
|
+
|
12
|
+
method = client.next_method
|
13
|
+
|
14
|
+
client.check_response(method, Qrack::Protocol::Channel::OpenOk, "Cannot open channel #{number}")
|
12
15
|
|
13
16
|
@active = true
|
14
17
|
:open_ok
|
@@ -19,7 +22,10 @@ module Bunny
|
|
19
22
|
client.send_frame(
|
20
23
|
Qrack::Protocol::Channel::Close.new(:reply_code => 200, :reply_text => 'bye', :method_id => 0, :class_id => 0)
|
21
24
|
)
|
22
|
-
|
25
|
+
|
26
|
+
method = client.next_method
|
27
|
+
|
28
|
+
client.check_response(method, Qrack::Protocol::Channel::CloseOk, "Error closing channel #{number}")
|
23
29
|
|
24
30
|
@active = false
|
25
31
|
:close_ok
|
data/lib/bunny/channel09.rb
CHANGED
@@ -8,7 +8,10 @@ module Bunny
|
|
8
8
|
def open
|
9
9
|
client.channel = self
|
10
10
|
client.send_frame(Qrack::Protocol09::Channel::Open.new)
|
11
|
-
|
11
|
+
|
12
|
+
method = client.next_method
|
13
|
+
|
14
|
+
client.check_response(method, Qrack::Protocol09::Channel::OpenOk, "Cannot open channel #{number}")
|
12
15
|
|
13
16
|
@active = true
|
14
17
|
:open_ok
|
@@ -19,7 +22,10 @@ module Bunny
|
|
19
22
|
client.send_frame(
|
20
23
|
Qrack::Protocol09::Channel::Close.new(:reply_code => 200, :reply_text => 'bye', :method_id => 0, :class_id => 0)
|
21
24
|
)
|
22
|
-
|
25
|
+
|
26
|
+
method = client.next_method
|
27
|
+
|
28
|
+
client.check_response(method, Qrack::Protocol09::Channel::CloseOk, "Error closing channel #{number}")
|
23
29
|
|
24
30
|
@active = false
|
25
31
|
:close_ok
|
data/lib/bunny/client08.rb
CHANGED
@@ -22,10 +22,15 @@ Sets up a Bunny::Client object ready for connection to a broker/server. _Client_
|
|
22
22
|
==== OPTIONS:
|
23
23
|
|
24
24
|
* <tt>:host => '_hostname_' (default = 'localhost')</tt>
|
25
|
-
* <tt>:port => _portno_ (default = 5672)</tt>
|
25
|
+
* <tt>:port => _portno_ (default = 5672 or 5671 if :ssl set to true)</tt>
|
26
26
|
* <tt>:vhost => '_vhostname_' (default = '/')</tt>
|
27
27
|
* <tt>:user => '_username_' (default = 'guest')</tt>
|
28
28
|
* <tt>:pass => '_password_' (default = 'guest')</tt>
|
29
|
+
* <tt>:ssl => true or false (default = false)</tt> - If set to _true_, ssl
|
30
|
+
encryption will be used and port will default to 5671.
|
31
|
+
* <tt>:verify_ssl => true or false (default = true)</tt> - If ssl is enabled,
|
32
|
+
this will cause OpenSSL to validate the server certificate unless this
|
33
|
+
parameter is set to _false_.
|
29
34
|
* <tt>:logfile => '_logfilepath_' (default = nil)</tt>
|
30
35
|
* <tt>:logging => true or false (_default_)</tt> - If set to _true_, session information is sent
|
31
36
|
to STDOUT if <tt>:logfile</tt> has not been specified. Otherwise, session information is written to
|
@@ -37,16 +42,49 @@ Sets up a Bunny::Client object ready for connection to a broker/server. _Client_
|
|
37
42
|
* <tt>:frame_max => maximum frame size in bytes (default = 131072)</tt>
|
38
43
|
* <tt>:channel_max => maximum number of channels (default = 0 no maximum)</tt>
|
39
44
|
* <tt>:heartbeat => number of seconds (default = 0 no heartbeat)</tt>
|
45
|
+
* <tt>:connect_timeout => number of seconds before Qrack::ConnectionTimeout is raised (default = 5)</tt>
|
40
46
|
|
41
47
|
=end
|
42
48
|
|
43
49
|
def initialize(opts = {})
|
44
50
|
super
|
45
51
|
@spec = '0-8'
|
46
|
-
@port = opts[:port] || Qrack::Protocol::PORT
|
52
|
+
@port = opts[:port] || (opts[:ssl] ? Qrack::Protocol::SSL_PORT : Qrack::Protocol::PORT)
|
47
53
|
@insist = opts[:insist]
|
48
54
|
end
|
49
55
|
|
56
|
+
=begin rdoc
|
57
|
+
|
58
|
+
=== DESCRIPTION:
|
59
|
+
|
60
|
+
Checks response from AMQP methods and takes appropriate action
|
61
|
+
|
62
|
+
=end
|
63
|
+
|
64
|
+
def check_response(received_method, expected_method, err_msg, err_class = Bunny::ProtocolError)
|
65
|
+
case
|
66
|
+
when received_method.is_a?(Qrack::Protocol::Connection::Close)
|
67
|
+
# Clean up the socket
|
68
|
+
close_socket
|
69
|
+
|
70
|
+
raise Bunny::ForcedConnectionCloseError,
|
71
|
+
"Error Reply Code: #{received_method.reply_code}\nError Reply Text: #{received_method.reply_text}"
|
72
|
+
|
73
|
+
when received_method.is_a?(Qrack::Protocol::Channel::Close)
|
74
|
+
# Clean up the channel
|
75
|
+
channel.active = false
|
76
|
+
|
77
|
+
raise Bunny::ForcedChannelCloseError,
|
78
|
+
"Error Reply Code: #{received_method.reply_code}\nError Reply Text: #{received_method.reply_text}"
|
79
|
+
|
80
|
+
when !received_method.is_a?(expected_method)
|
81
|
+
raise err_class, err_msg
|
82
|
+
|
83
|
+
else
|
84
|
+
:response_ok
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
50
88
|
def close_connection
|
51
89
|
# Set client channel to zero
|
52
90
|
switch_channel(0)
|
@@ -54,7 +92,11 @@ Sets up a Bunny::Client object ready for connection to a broker/server. _Client_
|
|
54
92
|
send_frame(
|
55
93
|
Qrack::Protocol::Connection::Close.new(:reply_code => 200, :reply_text => 'Goodbye', :class_id => 0, :method_id => 0)
|
56
94
|
)
|
57
|
-
|
95
|
+
|
96
|
+
method = next_method
|
97
|
+
|
98
|
+
check_response(method, Qrack::Protocol::Connection::CloseOk, "Error closing connection")
|
99
|
+
|
58
100
|
end
|
59
101
|
|
60
102
|
def create_channel
|
@@ -92,8 +134,7 @@ Exchange
|
|
92
134
|
=end
|
93
135
|
|
94
136
|
def exchange(name, opts = {})
|
95
|
-
|
96
|
-
Bunny::Exchange.new(self, name, opts)
|
137
|
+
exchanges[name] || Bunny::Exchange.new(self, name, opts)
|
97
138
|
end
|
98
139
|
|
99
140
|
def init_connection
|
@@ -152,7 +193,7 @@ Exchange
|
|
152
193
|
)
|
153
194
|
|
154
195
|
frame = next_frame
|
155
|
-
raise Bunny::ProtocolError, "Connection failed - user: #{@user}
|
196
|
+
raise Bunny::ProtocolError, "Connection failed - user: #{@user}" if frame.nil?
|
156
197
|
|
157
198
|
method = frame.payload
|
158
199
|
|
@@ -168,7 +209,7 @@ Exchange
|
|
168
209
|
|
169
210
|
case method = next_method
|
170
211
|
when Qrack::Protocol::Connection::OpenOk
|
171
|
-
|
212
|
+
:ok
|
172
213
|
when Qrack::Protocol::Connection::Redirect
|
173
214
|
raise Bunny::ConnectionError, "Cannot connect to the specified server - host: #{@host}, port: #{@port}" if @insist
|
174
215
|
|
@@ -217,9 +258,9 @@ true, they are applied to the entire connection.
|
|
217
258
|
Qrack::Protocol::Basic::Qos.new({ :prefetch_size => 0, :prefetch_count => 1, :global => false }.merge(opts))
|
218
259
|
)
|
219
260
|
|
220
|
-
|
221
|
-
|
222
|
-
|
261
|
+
method = next_method
|
262
|
+
|
263
|
+
check_response(method, Qrack::Protocol::Basic::QosOk, "Error specifying Quality of Service")
|
223
264
|
|
224
265
|
# return confirmation
|
225
266
|
:qos_ok
|
@@ -265,9 +306,8 @@ Queue
|
|
265
306
|
name = nil
|
266
307
|
end
|
267
308
|
|
268
|
-
|
269
|
-
|
270
|
-
Bunny::Queue.new(self, name, opts)
|
309
|
+
# Queue is responsible for placing itself in the list of queues
|
310
|
+
queues[name] || Bunny::Queue.new(self, name, opts)
|
271
311
|
end
|
272
312
|
|
273
313
|
=begin rdoc
|
@@ -297,8 +337,11 @@ the message, potentially then delivering it to an alternative subscriber.
|
|
297
337
|
send_frame(
|
298
338
|
Qrack::Protocol::Access::Request.new(:realm => '/data', :read => true, :write => true, :active => true, :passive => true)
|
299
339
|
)
|
340
|
+
|
300
341
|
method = next_method
|
301
|
-
|
342
|
+
|
343
|
+
check_response(method, Qrack::Protocol::Access::RequestOk, "Access denied")
|
344
|
+
|
302
345
|
self.ticket = method.ticket
|
303
346
|
end
|
304
347
|
|
@@ -384,10 +427,10 @@ after a commit.
|
|
384
427
|
|
385
428
|
def tx_commit
|
386
429
|
send_frame(Qrack::Protocol::Tx::Commit.new())
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
430
|
+
|
431
|
+
method = next_method
|
432
|
+
|
433
|
+
check_response(method, Qrack::Protocol::Tx::CommitOk, "Error commiting transaction")
|
391
434
|
|
392
435
|
# return confirmation
|
393
436
|
:commit_ok
|
@@ -409,9 +452,9 @@ after a rollback.
|
|
409
452
|
def tx_rollback
|
410
453
|
send_frame(Qrack::Protocol::Tx::Rollback.new())
|
411
454
|
|
412
|
-
|
413
|
-
|
414
|
-
|
455
|
+
method = next_method
|
456
|
+
|
457
|
+
check_response(method, Qrack::Protocol::Tx::RollbackOk, "Error rolling back transaction")
|
415
458
|
|
416
459
|
# return confirmation
|
417
460
|
:rollback_ok
|
@@ -432,10 +475,10 @@ using the Commit or Rollback methods.
|
|
432
475
|
|
433
476
|
def tx_select
|
434
477
|
send_frame(Qrack::Protocol::Tx::Select.new())
|
478
|
+
|
479
|
+
method = next_method
|
435
480
|
|
436
|
-
|
437
|
-
"Error initiating transactions for current channel" unless
|
438
|
-
next_method.is_a?(Qrack::Protocol::Tx::SelectOk)
|
481
|
+
check_response(method, Qrack::Protocol::Tx::SelectOk, "Error initiating transactions for current channel")
|
439
482
|
|
440
483
|
# return confirmation
|
441
484
|
:select_ok
|