bunny 0.9.0.pre13 → 0.9.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ChangeLog.md +23 -0
- data/README.md +2 -2
- data/lib/bunny.rb +15 -2
- data/lib/bunny/authentication/credentials_encoder.rb +18 -0
- data/lib/bunny/authentication/external_mechanism_encoder.rb +1 -0
- data/lib/bunny/authentication/plain_mechanism_encoder.rb +2 -0
- data/lib/bunny/channel.rb +9 -3
- data/lib/bunny/channel_id_allocator.rb +8 -0
- data/lib/bunny/concurrent/condition.rb +2 -0
- data/lib/bunny/concurrent/continuation_queue.rb +3 -0
- data/lib/bunny/concurrent/linked_continuation_queue.rb +3 -0
- data/lib/bunny/consumer.rb +2 -0
- data/lib/bunny/consumer_tag_generator.rb +1 -0
- data/lib/bunny/consumer_work_pool.rb +2 -0
- data/lib/bunny/delivery_info.rb +18 -2
- data/lib/bunny/exceptions.rb +49 -10
- data/lib/bunny/framing.rb +3 -0
- data/lib/bunny/heartbeat_sender.rb +4 -1
- data/lib/bunny/message_properties.rb +22 -0
- data/lib/bunny/queue.rb +49 -0
- data/lib/bunny/reader_loop.rb +1 -0
- data/lib/bunny/return_info.rb +11 -0
- data/lib/bunny/session.rb +53 -19
- data/lib/bunny/socket.rb +1 -0
- data/lib/bunny/ssl_socket.rb +29 -5
- data/lib/bunny/system_timer.rb +2 -0
- data/lib/bunny/test_kit.rb +4 -3
- data/lib/bunny/transport.rb +41 -25
- data/lib/bunny/version.rb +2 -1
- data/spec/compatibility/queue_declare_spec.rb +4 -0
- data/spec/compatibility/queue_declare_with_default_channel_spec.rb +33 -0
- data/spec/higher_level_api/integration/basic_get_spec.rb +35 -0
- data/spec/higher_level_api/integration/basic_nack_spec.rb +19 -1
- data/spec/higher_level_api/integration/connection_spec.rb +5 -0
- data/spec/higher_level_api/integration/queue_unbind_spec.rb +23 -2
- data/spec/higher_level_api/integration/tls_connection_spec.rb +47 -0
- data/spec/lower_level_api/integration/basic_cancel_spec.rb +8 -1
- data/spec/tls/cacert.pem +18 -0
- data/spec/tls/client_cert.pem +18 -0
- data/spec/tls/client_key.pem +27 -0
- data/spec/tls/server_cert.pem +18 -0
- data/spec/tls/server_key.pem +27 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a3593389008586553f21244193e35c325767ee25
|
4
|
+
data.tar.gz: e16cdce6c2dea0e4a01d5847494286e2b64a17ca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 292dc01ab77ceb89f4c6dcd8e3a81f91e90167de8df9461a5da6a1466cb9f705c7f18e22ad3286774c5f18e66a21175c73588cfc609321a87f386e91613e08b7
|
7
|
+
data.tar.gz: efd54687b032919ed942a985d4a7f9c703110bd35faab173eb97de8c8a02e24de8edd1da0a9b00bb96e1a572afe905142ab637b24f94ab8e1834ea11a7803597
|
data/ChangeLog.md
CHANGED
@@ -1,3 +1,26 @@
|
|
1
|
+
## Changes between Bunny 0.9.0.pre13 and 0.9.0.pre14
|
2
|
+
|
3
|
+
### Bunny::Queue#pop_waiting
|
4
|
+
|
5
|
+
`Bunny::Queue#pop_waiting` is a new function that mimics `Bunny::Queue#pop`
|
6
|
+
but will wait until a message is available. It uses a `:timeout` option and will
|
7
|
+
raise an exception if the timeout is hit:
|
8
|
+
|
9
|
+
``` ruby
|
10
|
+
# given 1 message in the queue,
|
11
|
+
# works exactly as Bunny::Queue#get
|
12
|
+
q.pop_waiting
|
13
|
+
|
14
|
+
# given no messages in the queue, will wait for up to 0.5 seconds
|
15
|
+
# for a message to become available. Raises an exception if the timeout
|
16
|
+
# is hit
|
17
|
+
q.pop_waiting(:timeout => 0.5)
|
18
|
+
```
|
19
|
+
|
20
|
+
This method only makes sense for collecting Request/Reply ("RPC") replies.
|
21
|
+
|
22
|
+
|
23
|
+
|
1
24
|
## Changes between Bunny 0.9.0.pre12 and 0.9.0.pre13
|
2
25
|
|
3
26
|
### Channels Without Consumers Now Tear Down Consumer Pools
|
data/README.md
CHANGED
@@ -33,12 +33,12 @@ To install Bunny 0.9.x with RubyGems:
|
|
33
33
|
gem install bunny --pre
|
34
34
|
```
|
35
35
|
|
36
|
-
the most recent 0.9.x version is `0.9.0.
|
36
|
+
the most recent 0.9.x version is `0.9.0.pre13`.
|
37
37
|
|
38
38
|
To use Bunny 0.9.x in a project managed with Bundler:
|
39
39
|
|
40
40
|
``` ruby
|
41
|
-
gem "bunny", ">= 0.9.0.
|
41
|
+
gem "bunny", ">= 0.9.0.pre13" # optionally: , :git => "git://github.com/ruby-amqp/bunny.git", :branch => "master"
|
42
42
|
```
|
43
43
|
|
44
44
|
|
data/lib/bunny.rb
CHANGED
@@ -26,7 +26,10 @@ require "bunny/exchange"
|
|
26
26
|
require "bunny/queue"
|
27
27
|
require "bunny/consumer"
|
28
28
|
|
29
|
+
# Bunny is a RabbitMQ client that focuses on ease of use.
|
30
|
+
# @see http://rubybunny.info
|
29
31
|
module Bunny
|
32
|
+
# AMQP protocol version Bunny implements
|
30
33
|
PROTOCOL_VERSION = AMQ::Protocol::PROTOCOL_VERSION
|
31
34
|
|
32
35
|
# unifies Ruby standard library's Timeout (which is not accurate on
|
@@ -47,15 +50,24 @@ module Bunny
|
|
47
50
|
# API
|
48
51
|
#
|
49
52
|
|
53
|
+
# @return [String] Bunny version
|
50
54
|
def self.version
|
51
55
|
VERSION
|
52
56
|
end
|
53
57
|
|
58
|
+
# @return [String] AMQP protocol version Bunny implements
|
54
59
|
def self.protocol_version
|
55
60
|
AMQ::Protocol::PROTOCOL_VERSION
|
56
61
|
end
|
57
62
|
|
58
|
-
|
63
|
+
# Instantiates a new connection. The actual connection network
|
64
|
+
# connection is started with {Bunny::Session#start}
|
65
|
+
#
|
66
|
+
# @return [Bunny::Session]
|
67
|
+
# @see Bunny::Session#start
|
68
|
+
# @see http://rubybunny.info/articles/getting_started.html
|
69
|
+
# @see http://rubybunny.info/articles/connecting.html
|
70
|
+
# @api public
|
59
71
|
def self.new(connection_string_or_opts = {}, opts = {}, &block)
|
60
72
|
if connection_string_or_opts.respond_to?(:keys) && opts.empty?
|
61
73
|
opts = connection_string_or_opts
|
@@ -71,7 +83,7 @@ module Bunny
|
|
71
83
|
def self.run(connection_string_or_opts = {}, opts = {}, &block)
|
72
84
|
raise ArgumentError, 'Bunny#run requires a block' unless block
|
73
85
|
|
74
|
-
client =
|
86
|
+
client = Session.new(connection_string_or_opts, opts)
|
75
87
|
|
76
88
|
begin
|
77
89
|
client.start
|
@@ -80,6 +92,7 @@ module Bunny
|
|
80
92
|
client.stop
|
81
93
|
end
|
82
94
|
|
95
|
+
# backwards compatibility
|
83
96
|
:run_ok
|
84
97
|
end
|
85
98
|
end
|
@@ -1,27 +1,45 @@
|
|
1
1
|
module Bunny
|
2
|
+
# Contains credentials encoding implementations for various
|
3
|
+
# authentication strategies.
|
2
4
|
module Authentication
|
5
|
+
# Base credentials encoder. Subclasses implement credentials encoding for
|
6
|
+
# a particular authentication mechanism (PLAIN, EXTERNAL, etc).
|
7
|
+
#
|
8
|
+
# @api plugin
|
3
9
|
class CredentialsEncoder
|
4
10
|
|
5
11
|
#
|
6
12
|
# API
|
7
13
|
#
|
8
14
|
|
15
|
+
# Session that uses this encoder
|
16
|
+
# @return [Bunny::Session]
|
9
17
|
attr_reader :session
|
10
18
|
|
19
|
+
# Instantiates a new encoder for the authentication mechanism
|
20
|
+
# used by the provided session.
|
21
|
+
#
|
22
|
+
# @return [Bunny::CredentialsEncoder]
|
11
23
|
def self.for_session(session)
|
12
24
|
registry[session.mechanism].new(session)
|
13
25
|
end
|
14
26
|
|
27
|
+
# @private
|
15
28
|
def self.registry
|
16
29
|
@@registry ||= Hash.new { raise NotImplementedError }
|
17
30
|
end
|
18
31
|
|
32
|
+
# Registers an encoder for authentication mechanism
|
33
|
+
# @api plugin
|
19
34
|
def self.auth_mechanism(*mechanisms)
|
20
35
|
mechanisms.each do |m|
|
21
36
|
registry[m] = self
|
22
37
|
end
|
23
38
|
end
|
24
39
|
|
40
|
+
# Encodes provided credentials according to the specific authentication
|
41
|
+
# mechanism
|
42
|
+
# @return [String] Encoded credentials
|
25
43
|
def encode_credentials(username, challenge)
|
26
44
|
raise NotImplementedError.new("Subclasses must override this method")
|
27
45
|
end
|
@@ -2,10 +2,12 @@ require "bunny/authentication/credentials_encoder"
|
|
2
2
|
|
3
3
|
module Bunny
|
4
4
|
module Authentication
|
5
|
+
# Encodes credentials using the PLAIN mechanism
|
5
6
|
class PlainMechanismEncoder < CredentialsEncoder
|
6
7
|
|
7
8
|
auth_mechanism "PLAIN", "plain"
|
8
9
|
|
10
|
+
# Encodes provided credentials as described in RFC 2595
|
9
11
|
# @api public
|
10
12
|
# @see http://tools.ietf.org/rfc/rfc2595.txt RFC 2595
|
11
13
|
def encode_credentials(username, password)
|
data/lib/bunny/channel.rb
CHANGED
@@ -127,16 +127,20 @@ module Bunny
|
|
127
127
|
#
|
128
128
|
# @see http://www.rabbitmq.com/tutorials/amqp-concepts.html AMQP 0.9.1 Model Concepts Guide
|
129
129
|
# @see http://rubybunny.info/articles/getting_started.html Getting Started with RabbitMQ Using Bunny
|
130
|
+
# @see http://rubybunny.info/articles/queues.html Queues and Consumers
|
131
|
+
# @see http://rubybunny.info/articles/exchanges.html Exchanges and Publishing
|
130
132
|
# @see http://rubybunny.info/articles/error_handling.html Error Handling and Recovery Guide
|
131
133
|
class Channel
|
132
134
|
|
133
135
|
#
|
134
136
|
# API
|
135
137
|
#
|
138
|
+
|
136
139
|
# @return [Integer] Channel id
|
137
140
|
attr_accessor :id
|
138
141
|
# @return [Bunny::Session] AMQP connection this channel was opened on
|
139
142
|
attr_reader :connection
|
143
|
+
# @return [Symbol] Channel status (:opening, :open, :closed)
|
140
144
|
attr_reader :status
|
141
145
|
# @return [Bunny::ConsumerWorkPool] Thread pool delivered messages are dispatched to.
|
142
146
|
attr_reader :work_pool
|
@@ -188,6 +192,7 @@ module Bunny
|
|
188
192
|
@next_publish_seq_no = 0
|
189
193
|
end
|
190
194
|
|
195
|
+
# @private
|
191
196
|
def read_write_timeout
|
192
197
|
@connection.read_write_timeout
|
193
198
|
end
|
@@ -1443,6 +1448,7 @@ module Bunny
|
|
1443
1448
|
# @endgroup
|
1444
1449
|
|
1445
1450
|
|
1451
|
+
# @return [String] Brief human-readable representation of the channel
|
1446
1452
|
def to_s
|
1447
1453
|
"#<#{self.class.name}:#{object_id} @id=#{self.number} @connection=#{@connection.to_s}>"
|
1448
1454
|
end
|
@@ -1777,7 +1783,7 @@ module Bunny
|
|
1777
1783
|
raise ChannelAlreadyClosed.new("cannot use a channel that was already closed! Channel id: #{@id}", self) if closed?
|
1778
1784
|
end
|
1779
1785
|
|
1780
|
-
# @
|
1786
|
+
# @private
|
1781
1787
|
def reset_continuations
|
1782
1788
|
@continuations = new_continuation
|
1783
1789
|
@confirms_continuations = new_continuation
|
@@ -1786,12 +1792,12 @@ module Bunny
|
|
1786
1792
|
|
1787
1793
|
|
1788
1794
|
if defined?(JRUBY_VERSION)
|
1789
|
-
# @
|
1795
|
+
# @private
|
1790
1796
|
def new_continuation
|
1791
1797
|
Concurrent::LinkedContinuationQueue.new
|
1792
1798
|
end
|
1793
1799
|
else
|
1794
|
-
# @
|
1800
|
+
# @private
|
1795
1801
|
def new_continuation
|
1796
1802
|
Concurrent::ContinuationQueue.new
|
1797
1803
|
end
|
@@ -2,6 +2,13 @@ require "thread"
|
|
2
2
|
require "amq/int_allocator"
|
3
3
|
|
4
4
|
module Bunny
|
5
|
+
# Bitset-based channel id allocator. When channels are closed,
|
6
|
+
# ids are released back to the pool.
|
7
|
+
#
|
8
|
+
# Every connection has its own allocator.
|
9
|
+
#
|
10
|
+
# Allocating and releasing ids is synchronized and can be performed
|
11
|
+
# from multiple threads.
|
5
12
|
class ChannelIdAllocator
|
6
13
|
|
7
14
|
#
|
@@ -64,6 +71,7 @@ module Bunny
|
|
64
71
|
end
|
65
72
|
end
|
66
73
|
|
74
|
+
# @private
|
67
75
|
def synchronize(&block)
|
68
76
|
@mutex.synchronize(&block)
|
69
77
|
end
|
@@ -1,12 +1,14 @@
|
|
1
1
|
require "thread"
|
2
2
|
|
3
3
|
module Bunny
|
4
|
+
# @private
|
4
5
|
module Concurrent
|
5
6
|
# Akin to java.util.concurrent.Condition and intrinsic object monitors (Object#wait, Object#notify, Object#notifyAll) in Java:
|
6
7
|
# threads can wait (block until notified) on a condition other threads notify them about.
|
7
8
|
# Unlike the j.u.c. version, this one has a single waiting set.
|
8
9
|
#
|
9
10
|
# Conditions can optionally be annotated with a description string for ease of debugging.
|
11
|
+
# @private
|
10
12
|
class Condition
|
11
13
|
attr_reader :waiting_threads, :description
|
12
14
|
|
@@ -9,6 +9,8 @@ java_import java.util.concurrent.TimeUnit
|
|
9
9
|
|
10
10
|
module Bunny
|
11
11
|
module Concurrent
|
12
|
+
# Continuation queue implementation for JRuby.
|
13
|
+
#
|
12
14
|
# On JRuby, we'd rather use reliable and heavily battle tested j.u.c.
|
13
15
|
# primitives with well described semantics than informally specified, clumsy
|
14
16
|
# and limited Ruby standard library parts.
|
@@ -18,6 +20,7 @@ module Bunny
|
|
18
20
|
#
|
19
21
|
# Compared to the Ruby standard library Queue, there is one limitation: you cannot
|
20
22
|
# push a nil on the queue, it will fail with a null pointer exception.
|
23
|
+
# @private
|
21
24
|
class LinkedContinuationQueue
|
22
25
|
def initialize(*args, &block)
|
23
26
|
@q = LinkedBlockingQueue.new
|
data/lib/bunny/consumer.rb
CHANGED
@@ -79,10 +79,12 @@ module Bunny
|
|
79
79
|
@channel.basic_cancel(@consumer_tag)
|
80
80
|
end
|
81
81
|
|
82
|
+
# @return [String] More detailed human-readable string representation of this consumer
|
82
83
|
def inspect
|
83
84
|
"#<#{self.class.name}:#{object_id} @channel_id=#{@channel.number} @queue=#{self.queue_name}> @consumer_tag=#{@consumer_tag} @exclusive=#{@exclusive} @no_ack=#{@no_ack}>"
|
84
85
|
end
|
85
86
|
|
87
|
+
# @return [String] Brief human-readable string representation of this consumer
|
86
88
|
def to_s
|
87
89
|
"#<#{self.class.name}:#{object_id} @channel_id=#{@channel.number} @queue=#{self.queue_name}> @consumer_tag=#{@consumer_tag}>"
|
88
90
|
end
|
data/lib/bunny/delivery_info.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module Bunny
|
2
|
-
# Wraps AMQ::Protocol::Basic::Deliver to
|
2
|
+
# Wraps {AMQ::Protocol::Basic::Deliver} to
|
3
3
|
# provide access to the delivery properties as immutable hash as
|
4
4
|
# well as methods.
|
5
5
|
class DeliveryInfo
|
@@ -14,8 +14,12 @@ module Bunny
|
|
14
14
|
# API
|
15
15
|
#
|
16
16
|
|
17
|
-
|
17
|
+
# @return [Bunny::Consumer] Consumer this delivery is for
|
18
|
+
attr_reader :consumer
|
19
|
+
# @return [Bunny::Channel] Channel this delivery is on
|
20
|
+
attr_reader :channel
|
18
21
|
|
22
|
+
# @private
|
19
23
|
def initialize(basic_deliver, consumer, channel)
|
20
24
|
@basic_deliver = basic_deliver
|
21
25
|
@hash = {
|
@@ -31,43 +35,55 @@ module Bunny
|
|
31
35
|
@channel = channel
|
32
36
|
end
|
33
37
|
|
38
|
+
# Iterates over the delivery properties
|
39
|
+
# @see Enumerable#each
|
34
40
|
def each(*args, &block)
|
35
41
|
@hash.each(*args, &block)
|
36
42
|
end
|
37
43
|
|
44
|
+
# Accesses delivery properties by key
|
45
|
+
# @see Hash#[]
|
38
46
|
def [](k)
|
39
47
|
@hash[k]
|
40
48
|
end
|
41
49
|
|
50
|
+
# @return [Hash] Hash representation of this delivery info
|
42
51
|
def to_hash
|
43
52
|
@hash
|
44
53
|
end
|
45
54
|
|
55
|
+
# @private
|
46
56
|
def to_s
|
47
57
|
to_hash.to_s
|
48
58
|
end
|
49
59
|
|
60
|
+
# @private
|
50
61
|
def inspect
|
51
62
|
to_hash.inspect
|
52
63
|
end
|
53
64
|
|
65
|
+
# @return [String] Consumer tag this delivery is for
|
54
66
|
def consumer_tag
|
55
67
|
@basic_deliver.consumer_tag
|
56
68
|
end
|
57
69
|
|
70
|
+
# @return [String] Delivery identifier that is used to acknowledge, reject and nack deliveries
|
58
71
|
def delivery_tag
|
59
72
|
@basic_deliver.delivery_tag
|
60
73
|
end
|
61
74
|
|
75
|
+
# @return [Boolean] true if this delivery is a redelivery (the message was requeued at least once)
|
62
76
|
def redelivered
|
63
77
|
@basic_deliver.redelivered
|
64
78
|
end
|
65
79
|
alias redelivered? redelivered
|
66
80
|
|
81
|
+
# @return [String] Name of the exchange this message was published to
|
67
82
|
def exchange
|
68
83
|
@basic_deliver.exchange
|
69
84
|
end
|
70
85
|
|
86
|
+
# @return [String] Routing key this message was published with
|
71
87
|
def routing_key
|
72
88
|
@basic_deliver.routing_key
|
73
89
|
end
|
data/lib/bunny/exceptions.rb
CHANGED
@@ -1,7 +1,14 @@
|
|
1
1
|
module Bunny
|
2
|
+
# Base class for all Bunny exceptions
|
3
|
+
# @api public
|
2
4
|
class Exception < ::StandardError
|
3
5
|
end
|
4
6
|
|
7
|
+
# Indicates a network failure. If automatic network
|
8
|
+
# recovery mode is enabled, these will be typically handled
|
9
|
+
# by the client itself.
|
10
|
+
#
|
11
|
+
# @api public
|
5
12
|
class NetworkFailure < Exception
|
6
13
|
attr_reader :cause
|
7
14
|
|
@@ -11,6 +18,7 @@ module Bunny
|
|
11
18
|
end
|
12
19
|
end
|
13
20
|
|
21
|
+
# Base class for all channel level exceptions
|
14
22
|
class ChannelLevelException < Exception
|
15
23
|
attr_reader :channel, :channel_close
|
16
24
|
|
@@ -22,6 +30,7 @@ module Bunny
|
|
22
30
|
end
|
23
31
|
end
|
24
32
|
|
33
|
+
# Base class for all connection level exceptions
|
25
34
|
class ConnectionLevelException < Exception
|
26
35
|
attr_reader :connection, :connection_close
|
27
36
|
|
@@ -34,6 +43,8 @@ module Bunny
|
|
34
43
|
end
|
35
44
|
|
36
45
|
|
46
|
+
# Raised when TCP connection to RabbitMQ fails because of an unresolved
|
47
|
+
# hostname, connectivity problem, etc
|
37
48
|
class TCPConnectionFailed < Exception
|
38
49
|
attr_reader :hostname, :port
|
39
50
|
|
@@ -48,6 +59,7 @@ module Bunny
|
|
48
59
|
end
|
49
60
|
end
|
50
61
|
|
62
|
+
# Raised when a frame is sent over an already closed connection
|
51
63
|
class ConnectionClosedError < Exception
|
52
64
|
def initialize(frame)
|
53
65
|
if frame.respond_to?(:method_class)
|
@@ -58,6 +70,8 @@ module Bunny
|
|
58
70
|
end
|
59
71
|
end
|
60
72
|
|
73
|
+
# Raised when RabbitMQ closes TCP connection before finishing connection
|
74
|
+
# sequence properly. This typically indicates an authentication issue.
|
61
75
|
class PossibleAuthenticationFailureError < Exception
|
62
76
|
|
63
77
|
#
|
@@ -76,18 +90,28 @@ module Bunny
|
|
76
90
|
|
77
91
|
|
78
92
|
# backwards compatibility
|
93
|
+
# @private
|
79
94
|
ConnectionError = TCPConnectionFailed
|
95
|
+
# @private
|
80
96
|
ServerDownError = TCPConnectionFailed
|
81
97
|
|
82
|
-
|
83
|
-
|
84
|
-
class
|
85
|
-
|
86
|
-
|
87
|
-
|
98
|
+
# Raised when a channel is closed forcefully using rabbitmqctl
|
99
|
+
# or the management UI plugin
|
100
|
+
class ForcedChannelCloseError < ChannelLevelException; end
|
101
|
+
# Raised when a connection is closed forcefully using rabbitmqctl
|
102
|
+
# or the management UI plugin
|
103
|
+
class ForcedConnectionCloseError < ConnectionLevelException; end
|
104
|
+
# @private
|
105
|
+
class MessageError < ConnectionLevelException; end
|
106
|
+
# @private
|
107
|
+
class ProtocolError < ConnectionLevelException; end
|
108
|
+
# Raised when RabbitMQ reports and internal error
|
109
|
+
class InternalError < ConnectionLevelException; end
|
110
|
+
|
111
|
+
# Raised when read or write I/O operations time out (but only if
|
88
112
|
# a connection is configured to use them)
|
89
113
|
class ClientTimeout < Timeout::Error; end
|
90
|
-
#
|
114
|
+
# Raised on initial TCP connection timeout
|
91
115
|
class ConnectionTimeout < Timeout::Error; end
|
92
116
|
|
93
117
|
|
@@ -116,7 +140,7 @@ module Bunny
|
|
116
140
|
end
|
117
141
|
end
|
118
142
|
|
119
|
-
|
143
|
+
# Raised when a closed channel is used
|
120
144
|
class ChannelAlreadyClosed < Exception
|
121
145
|
attr_reader :channel
|
122
146
|
|
@@ -127,31 +151,43 @@ module Bunny
|
|
127
151
|
end
|
128
152
|
end
|
129
153
|
|
154
|
+
# Raised when RabbitMQ responds with 406 PRECONDITION_FAILED
|
130
155
|
class PreconditionFailed < ChannelLevelException
|
131
156
|
end
|
132
157
|
|
158
|
+
# Raised when RabbitMQ responds with 404 NOT_FOUND
|
133
159
|
class NotFound < ChannelLevelException
|
134
160
|
end
|
135
161
|
|
162
|
+
# Raised when RabbitMQ responds with 405 RESOUCE_LOCKED
|
136
163
|
class ResourceLocked < ChannelLevelException
|
137
164
|
end
|
138
165
|
|
166
|
+
# Raised when RabbitMQ responds with 403 ACCESS_REFUSED
|
139
167
|
class AccessRefused < ChannelLevelException
|
140
168
|
end
|
141
169
|
|
142
|
-
|
170
|
+
# Raised when RabbitMQ responds with 504 CHANNEL_ERROR
|
143
171
|
class ChannelError < ConnectionLevelException
|
144
172
|
end
|
145
173
|
|
146
|
-
|
174
|
+
# Raised when RabbitMQ responds with 503 COMMAND_INVALID
|
175
|
+
class CommandInvalid < ConnectionLevelException
|
147
176
|
end
|
148
177
|
|
178
|
+
# Raised when RabbitMQ responds with 501 FRAME_ERROR
|
149
179
|
class FrameError < ConnectionLevelException
|
150
180
|
end
|
151
181
|
|
182
|
+
# Raised when RabbitMQ responds with 505 UNEXPECTED_FRAME
|
152
183
|
class UnexpectedFrame < ConnectionLevelException
|
153
184
|
end
|
154
185
|
|
186
|
+
# Raised when RabbitMQ responds with 506 RESOURCE_ERROR
|
187
|
+
class ResourceError < ConnectionLevelException
|
188
|
+
end
|
189
|
+
|
190
|
+
# @private
|
155
191
|
class NetworkErrorWrapper < Exception
|
156
192
|
attr_reader :other
|
157
193
|
|
@@ -161,6 +197,9 @@ module Bunny
|
|
161
197
|
end
|
162
198
|
end
|
163
199
|
|
200
|
+
# Raised when RabbitMQ responds with 302 CONNECTION_FORCED
|
201
|
+
# (which means the connection was closed using rabbitmqctl or
|
202
|
+
# RabbitMQ management UI)
|
164
203
|
class ConnectionForced < ConnectionLevelException
|
165
204
|
end
|
166
205
|
|