bunny 0.10.4 → 0.10.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ChangeLog.md +13 -0
- data/lib/bunny.rb +1 -14
- data/lib/bunny/channel.rb +18 -18
- data/lib/bunny/concurrent/continuation_queue.rb +1 -1
- data/lib/bunny/session.rb +46 -4
- data/lib/bunny/timeout.rb +18 -0
- data/lib/bunny/transport.rb +2 -2
- data/lib/bunny/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 30cd6500ecfd75b3739c29654e916438ec46851e
|
4
|
+
data.tar.gz: 2099cdb7829fcbd14dfe105b924b227ec764b052
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4eef9cc1148e341756184bb7685f84dc34d55ad3db86b030277360474e8cb13cdbbdf6f1323852e56f4deac0c8fc17ac072c295f610678d5e5aa2325ec50a81b
|
7
|
+
data.tar.gz: 7d69d18fc1d4eccaec10fe33423490b9b9bae51abc031170e658b3070706c6e29cc8c80d14d0ac444b28ab6faaf1a5ee362c73f78dc7b45c13f8358b3c25ccf6
|
data/ChangeLog.md
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
## Changes between Bunny 0.10.4 and 0.10.5
|
2
|
+
|
3
|
+
### Bunny::Session.parse_uri
|
4
|
+
|
5
|
+
`Bunny::Session.parse_uri` is a new method that parses
|
6
|
+
connection URIs into hashes that `Bunny::Session#initialize`
|
7
|
+
accepts.
|
8
|
+
|
9
|
+
``` ruby
|
10
|
+
Bunny::Session.parse_uri("amqp://user:pwd@broker.eng.megacorp.local/myapp_qa")
|
11
|
+
```
|
12
|
+
|
13
|
+
|
1
14
|
## Changes between Bunny 0.10.3 and 0.10.4
|
2
15
|
|
3
16
|
### Default Paths for TLS/SSL CA's on All OS'es
|
data/lib/bunny.rb
CHANGED
@@ -9,6 +9,7 @@ require "amq/protocol/extensions"
|
|
9
9
|
require "bunny/framing"
|
10
10
|
require "bunny/exceptions"
|
11
11
|
require "bunny/socket"
|
12
|
+
require "bunny/timeout"
|
12
13
|
|
13
14
|
begin
|
14
15
|
require "openssl"
|
@@ -33,20 +34,6 @@ module Bunny
|
|
33
34
|
# AMQP protocol version Bunny implements
|
34
35
|
PROTOCOL_VERSION = AMQ::Protocol::PROTOCOL_VERSION
|
35
36
|
|
36
|
-
# unifies Ruby standard library's Timeout (which is not accurate on
|
37
|
-
# Ruby 1.8 and has other issues) and SystemTimer (the gem)
|
38
|
-
Timer = if RUBY_VERSION < "1.9"
|
39
|
-
begin
|
40
|
-
require "bunny/system_timer"
|
41
|
-
Bunny::SystemTimer
|
42
|
-
rescue LoadError
|
43
|
-
Timeout
|
44
|
-
end
|
45
|
-
else
|
46
|
-
Timeout
|
47
|
-
end
|
48
|
-
|
49
|
-
|
50
37
|
#
|
51
38
|
# API
|
52
39
|
#
|
data/lib/bunny/channel.rb
CHANGED
@@ -602,7 +602,7 @@ module Bunny
|
|
602
602
|
|
603
603
|
@connection.send_frame(AMQ::Protocol::Basic::Qos.encode(@id, 0, prefetch_count, global))
|
604
604
|
|
605
|
-
Bunny::
|
605
|
+
Bunny::Timeout.timeout(read_write_timeout, ClientTimeout) do
|
606
606
|
@last_basic_qos_ok = wait_on_continuations
|
607
607
|
end
|
608
608
|
raise_if_continuation_resulted_in_a_channel_error!
|
@@ -621,7 +621,7 @@ module Bunny
|
|
621
621
|
raise_if_no_longer_open!
|
622
622
|
|
623
623
|
@connection.send_frame(AMQ::Protocol::Basic::Recover.encode(@id, requeue))
|
624
|
-
Bunny::
|
624
|
+
Bunny::Timeout.timeout(read_write_timeout, ClientTimeout) do
|
625
625
|
@last_basic_recover_ok = wait_on_continuations
|
626
626
|
end
|
627
627
|
raise_if_continuation_resulted_in_a_channel_error!
|
@@ -823,7 +823,7 @@ module Bunny
|
|
823
823
|
arguments))
|
824
824
|
|
825
825
|
begin
|
826
|
-
Bunny::
|
826
|
+
Bunny::Timeout.timeout(read_write_timeout, ClientTimeout) do
|
827
827
|
@last_basic_consume_ok = wait_on_continuations
|
828
828
|
end
|
829
829
|
rescue Exception => e
|
@@ -873,7 +873,7 @@ module Bunny
|
|
873
873
|
consumer.arguments))
|
874
874
|
|
875
875
|
begin
|
876
|
-
Bunny::
|
876
|
+
Bunny::Timeout.timeout(read_write_timeout, ClientTimeout) do
|
877
877
|
@last_basic_consume_ok = wait_on_continuations
|
878
878
|
end
|
879
879
|
rescue Exception => e
|
@@ -908,7 +908,7 @@ module Bunny
|
|
908
908
|
def basic_cancel(consumer_tag)
|
909
909
|
@connection.send_frame(AMQ::Protocol::Basic::Cancel.encode(@id, consumer_tag, false))
|
910
910
|
|
911
|
-
Bunny::
|
911
|
+
Bunny::Timeout.timeout(read_write_timeout, ClientTimeout) do
|
912
912
|
@last_basic_cancel_ok = wait_on_continuations
|
913
913
|
end
|
914
914
|
|
@@ -982,7 +982,7 @@ module Bunny
|
|
982
982
|
opts[:if_unused],
|
983
983
|
opts[:if_empty],
|
984
984
|
false))
|
985
|
-
Bunny::
|
985
|
+
Bunny::Timeout.timeout(read_write_timeout, ClientTimeout) do
|
986
986
|
@last_queue_delete_ok = wait_on_continuations
|
987
987
|
end
|
988
988
|
raise_if_continuation_resulted_in_a_channel_error!
|
@@ -1002,7 +1002,7 @@ module Bunny
|
|
1002
1002
|
|
1003
1003
|
@connection.send_frame(AMQ::Protocol::Queue::Purge.encode(@id, name, false))
|
1004
1004
|
|
1005
|
-
Bunny::
|
1005
|
+
Bunny::Timeout.timeout(read_write_timeout, ClientTimeout) do
|
1006
1006
|
@last_queue_purge_ok = wait_on_continuations
|
1007
1007
|
end
|
1008
1008
|
raise_if_continuation_resulted_in_a_channel_error!
|
@@ -1038,7 +1038,7 @@ module Bunny
|
|
1038
1038
|
opts[:routing_key],
|
1039
1039
|
false,
|
1040
1040
|
opts[:arguments]))
|
1041
|
-
Bunny::
|
1041
|
+
Bunny::Timeout.timeout(read_write_timeout, ClientTimeout) do
|
1042
1042
|
@last_queue_bind_ok = wait_on_continuations
|
1043
1043
|
end
|
1044
1044
|
|
@@ -1073,7 +1073,7 @@ module Bunny
|
|
1073
1073
|
exchange_name,
|
1074
1074
|
opts[:routing_key],
|
1075
1075
|
opts[:arguments]))
|
1076
|
-
Bunny::
|
1076
|
+
Bunny::Timeout.timeout(read_write_timeout, ClientTimeout) do
|
1077
1077
|
@last_queue_unbind_ok = wait_on_continuations
|
1078
1078
|
end
|
1079
1079
|
|
@@ -1112,7 +1112,7 @@ module Bunny
|
|
1112
1112
|
false,
|
1113
1113
|
false,
|
1114
1114
|
opts[:arguments]))
|
1115
|
-
Bunny::
|
1115
|
+
Bunny::Timeout.timeout(read_write_timeout, ClientTimeout) do
|
1116
1116
|
@last_exchange_declare_ok = wait_on_continuations
|
1117
1117
|
end
|
1118
1118
|
|
@@ -1137,7 +1137,7 @@ module Bunny
|
|
1137
1137
|
name,
|
1138
1138
|
opts[:if_unused],
|
1139
1139
|
false))
|
1140
|
-
Bunny::
|
1140
|
+
Bunny::Timeout.timeout(read_write_timeout, ClientTimeout) do
|
1141
1141
|
@last_exchange_delete_ok = wait_on_continuations
|
1142
1142
|
end
|
1143
1143
|
|
@@ -1181,7 +1181,7 @@ module Bunny
|
|
1181
1181
|
opts[:routing_key],
|
1182
1182
|
false,
|
1183
1183
|
opts[:arguments]))
|
1184
|
-
Bunny::
|
1184
|
+
Bunny::Timeout.timeout(read_write_timeout, ClientTimeout) do
|
1185
1185
|
@last_exchange_bind_ok = wait_on_continuations
|
1186
1186
|
end
|
1187
1187
|
|
@@ -1225,7 +1225,7 @@ module Bunny
|
|
1225
1225
|
opts[:routing_key],
|
1226
1226
|
false,
|
1227
1227
|
opts[:arguments]))
|
1228
|
-
Bunny::
|
1228
|
+
Bunny::Timeout.timeout(read_write_timeout, ClientTimeout) do
|
1229
1229
|
@last_exchange_unbind_ok = wait_on_continuations
|
1230
1230
|
end
|
1231
1231
|
|
@@ -1253,7 +1253,7 @@ module Bunny
|
|
1253
1253
|
raise_if_no_longer_open!
|
1254
1254
|
|
1255
1255
|
@connection.send_frame(AMQ::Protocol::Channel::Flow.encode(@id, active))
|
1256
|
-
Bunny::
|
1256
|
+
Bunny::Timeout.timeout(read_write_timeout, ClientTimeout) do
|
1257
1257
|
@last_channel_flow_ok = wait_on_continuations
|
1258
1258
|
end
|
1259
1259
|
raise_if_continuation_resulted_in_a_channel_error!
|
@@ -1274,7 +1274,7 @@ module Bunny
|
|
1274
1274
|
raise_if_no_longer_open!
|
1275
1275
|
|
1276
1276
|
@connection.send_frame(AMQ::Protocol::Tx::Select.encode(@id))
|
1277
|
-
Bunny::
|
1277
|
+
Bunny::Timeout.timeout(read_write_timeout, ClientTimeout) do
|
1278
1278
|
@last_tx_select_ok = wait_on_continuations
|
1279
1279
|
end
|
1280
1280
|
raise_if_continuation_resulted_in_a_channel_error!
|
@@ -1289,7 +1289,7 @@ module Bunny
|
|
1289
1289
|
raise_if_no_longer_open!
|
1290
1290
|
|
1291
1291
|
@connection.send_frame(AMQ::Protocol::Tx::Commit.encode(@id))
|
1292
|
-
Bunny::
|
1292
|
+
Bunny::Timeout.timeout(read_write_timeout, ClientTimeout) do
|
1293
1293
|
@last_tx_commit_ok = wait_on_continuations
|
1294
1294
|
end
|
1295
1295
|
raise_if_continuation_resulted_in_a_channel_error!
|
@@ -1304,7 +1304,7 @@ module Bunny
|
|
1304
1304
|
raise_if_no_longer_open!
|
1305
1305
|
|
1306
1306
|
@connection.send_frame(AMQ::Protocol::Tx::Rollback.encode(@id))
|
1307
|
-
Bunny::
|
1307
|
+
Bunny::Timeout.timeout(read_write_timeout, ClientTimeout) do
|
1308
1308
|
@last_tx_rollback_ok = wait_on_continuations
|
1309
1309
|
end
|
1310
1310
|
raise_if_continuation_resulted_in_a_channel_error!
|
@@ -1344,7 +1344,7 @@ module Bunny
|
|
1344
1344
|
@confirms_callback = callback
|
1345
1345
|
|
1346
1346
|
@connection.send_frame(AMQ::Protocol::Confirm::Select.encode(@id, false))
|
1347
|
-
Bunny::
|
1347
|
+
Bunny::Timeout.timeout(read_write_timeout, ClientTimeout) do
|
1348
1348
|
@last_confirm_select_ok = wait_on_continuations
|
1349
1349
|
end
|
1350
1350
|
raise_if_continuation_resulted_in_a_channel_error!
|
data/lib/bunny/session.rb
CHANGED
@@ -97,18 +97,23 @@ module Bunny
|
|
97
97
|
# @option connection_string_or_opts [String] :password ("guest") Password
|
98
98
|
# @option connection_string_or_opts [String] :vhost ("/") Virtual host to use
|
99
99
|
# @option connection_string_or_opts [Integer] :heartbeat (600) Heartbeat interval. 0 means no heartbeat.
|
100
|
+
# @option connection_string_or_opts [Boolean] :tls (false) Should TLS/SSL be used?
|
101
|
+
# @option connection_string_or_opts [String] :tls_cert (nil) Path to client TLS/SSL certificate file (.pem)
|
102
|
+
# @option connection_string_or_opts [String] :tls_key (nil) Path to client TLS/SSL private key file (.pem)
|
103
|
+
# @option connection_string_or_opts [Array<String>] :tls_ca_certificates Array of paths to TLS/SSL CA files (.pem), by default detected from OpenSSL configuration
|
100
104
|
#
|
101
105
|
# @option optz [String] :auth_mechanism ("PLAIN") Authentication mechanism, PLAIN or EXTERNAL
|
102
106
|
# @option optz [String] :locale ("PLAIN") Locale RabbitMQ should use
|
103
107
|
#
|
104
108
|
# @see http://rubybunny.info/articles/connecting.html Connecting to RabbitMQ guide
|
109
|
+
# @see http://rubybunny.info/articles/tls.html TLS/SSL guide
|
105
110
|
# @api public
|
106
111
|
def initialize(connection_string_or_opts = Hash.new, optz = Hash.new)
|
107
112
|
opts = case (ENV["RABBITMQ_URL"] || connection_string_or_opts)
|
108
113
|
when nil then
|
109
114
|
Hash.new
|
110
115
|
when String then
|
111
|
-
|
116
|
+
self.class.parse_uri(connection_string_or_opts)
|
112
117
|
when Hash then
|
113
118
|
connection_string_or_opts
|
114
119
|
end.merge(optz)
|
@@ -193,6 +198,8 @@ module Bunny
|
|
193
198
|
# @private
|
194
199
|
attr_reader :mutex_impl
|
195
200
|
|
201
|
+
# Provides a way to fine tune the socket used by connection.
|
202
|
+
# Accepts a block that the socket will be yielded to.
|
196
203
|
def configure_socket(&block)
|
197
204
|
raise ArgumentError, "No block provided!" if block.nil?
|
198
205
|
|
@@ -265,7 +272,7 @@ module Bunny
|
|
265
272
|
if @transport.open?
|
266
273
|
close_all_channels
|
267
274
|
|
268
|
-
Bunny::
|
275
|
+
Bunny::Timeout.timeout(@transport.disconnect_timeout, ClientTimeout) do
|
269
276
|
self.close_connection(true)
|
270
277
|
end
|
271
278
|
|
@@ -342,6 +349,41 @@ module Bunny
|
|
342
349
|
@default_channel.exchange(*args)
|
343
350
|
end
|
344
351
|
|
352
|
+
# Defines a callback that will be executed when RabbitMQ blocks the connection
|
353
|
+
# because it is running low on memory or disk space (as configured via config file
|
354
|
+
# and/or rabbitmqctl).
|
355
|
+
#
|
356
|
+
# @yield [AMQ::Protocol::Connection::Blocked] connection.blocked method which provides a reason for blocking
|
357
|
+
#
|
358
|
+
# @api public
|
359
|
+
def on_blocked(&block)
|
360
|
+
@block_callback = block
|
361
|
+
end
|
362
|
+
|
363
|
+
# Defines a callback that will be executed when RabbitMQ unblocks the connection
|
364
|
+
# that was previously blocked, e.g. because the memory or disk space alarm has cleared.
|
365
|
+
#
|
366
|
+
# @see #on_blocked
|
367
|
+
# @api public
|
368
|
+
def on_unblocked(&block)
|
369
|
+
@unblock_callback = block
|
370
|
+
end
|
371
|
+
|
372
|
+
# @return [Boolean] true if the connection is currently blocked by RabbitMQ because it's running low on
|
373
|
+
# RAM, disk space, or other resource; false otherwise
|
374
|
+
# @see #on_blocked
|
375
|
+
# @see #on_unblocked
|
376
|
+
def blocked?
|
377
|
+
@blocked
|
378
|
+
end
|
379
|
+
|
380
|
+
# Parses an amqp[s] URI into a hash that {Bunny::Session#initialize} accepts.
|
381
|
+
#
|
382
|
+
# @param [String] uri amqp or amqps URI to parse
|
383
|
+
# @return [Hash] Parsed URI as a hash
|
384
|
+
def self.parse_uri(uri)
|
385
|
+
AMQ::Settings.parse_amqp_url(uri)
|
386
|
+
end
|
345
387
|
|
346
388
|
#
|
347
389
|
# Implementation
|
@@ -376,7 +418,7 @@ module Bunny
|
|
376
418
|
# @private
|
377
419
|
def close_all_channels
|
378
420
|
@channels.reject {|n, ch| n == 0 || !ch.open? }.each do |_, ch|
|
379
|
-
Bunny::
|
421
|
+
Bunny::Timeout.timeout(@transport.disconnect_timeout, ClientTimeout) { ch.close }
|
380
422
|
end
|
381
423
|
end
|
382
424
|
|
@@ -635,7 +677,7 @@ module Bunny
|
|
635
677
|
# a native method that cannot be (easily) interrupted.
|
636
678
|
# So we use this ugly hack or else our test suite takes forever
|
637
679
|
# to run on JRuby (a new connection is opened/closed per example). MK.
|
638
|
-
if
|
680
|
+
if defined?(JRUBY_VERSION)
|
639
681
|
sleep 0.075
|
640
682
|
else
|
641
683
|
@reader_loop.join
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Bunny
|
2
|
+
# Unifies Ruby standard library's Timeout (which is not accurate on
|
3
|
+
# Ruby 1.8) and SystemTimer (the gem)
|
4
|
+
Timeout = if RUBY_VERSION < "1.9"
|
5
|
+
begin
|
6
|
+
require "bunny/system_timer"
|
7
|
+
Bunny::SystemTimer
|
8
|
+
rescue LoadError
|
9
|
+
Timeout
|
10
|
+
end
|
11
|
+
else
|
12
|
+
Timeout
|
13
|
+
end
|
14
|
+
|
15
|
+
# Backwards compatibility
|
16
|
+
# @private
|
17
|
+
Timer = Timeout
|
18
|
+
end
|
data/lib/bunny/transport.rb
CHANGED
@@ -112,7 +112,7 @@ module Bunny
|
|
112
112
|
def write(data)
|
113
113
|
begin
|
114
114
|
if @read_write_timeout
|
115
|
-
Bunny::
|
115
|
+
Bunny::Timeout.timeout(@read_write_timeout, Bunny::ClientTimeout) do
|
116
116
|
if open?
|
117
117
|
@writes_mutex.synchronize { @socket.write(data) }
|
118
118
|
@socket.flush
|
@@ -250,7 +250,7 @@ module Bunny
|
|
250
250
|
|
251
251
|
def initialize_socket
|
252
252
|
begin
|
253
|
-
@socket = Bunny::
|
253
|
+
@socket = Bunny::Timeout.timeout(@connect_timeout, ConnectionTimeout) do
|
254
254
|
Bunny::Socket.open(@host, @port,
|
255
255
|
:keepalive => @opts[:keepalive],
|
256
256
|
:socket_timeout => @connect_timeout)
|
data/lib/bunny/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bunny
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Duncan
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2013-08-
|
15
|
+
date: 2013-08-28 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: amq-protocol
|
@@ -123,6 +123,7 @@ files:
|
|
123
123
|
- lib/bunny/ssl_socket.rb
|
124
124
|
- lib/bunny/system_timer.rb
|
125
125
|
- lib/bunny/test_kit.rb
|
126
|
+
- lib/bunny/timeout.rb
|
126
127
|
- lib/bunny/transport.rb
|
127
128
|
- lib/bunny/version.rb
|
128
129
|
- lib/bunny/versioned_delivery_tag.rb
|