bunny 0.5.3 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|