bunny 2.20.3 → 2.22.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/bunny/channel.rb +2 -2
- data/lib/bunny/consumer_work_pool.rb +1 -1
- data/lib/bunny/session.rb +32 -13
- data/lib/bunny/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2edd88411f92dbdbb1d06b334006e446d5b3e3fb165f3baae3745bd066cf9651
|
4
|
+
data.tar.gz: 437032f606bb6f77fee02e65706e615f8a52c0e05467bbe257f1796fcedd624c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 698398dc76ca4e3dd11e3c5dc6b078998f23895bd3d975b01e1329c08c8ff0835cb9691d0108f0f6e13aaa769b870b258ff5e1de1958321be4804ca99b30a0be
|
7
|
+
data.tar.gz: 2a1fdcc61d683a991d07f601a986c5bc04d40cdd7155a1833dc7dba46be014c23d36612c505531b2f2adfe08ed057d6a493cbf5df368318205ffaf88659a88fb
|
data/lib/bunny/channel.rb
CHANGED
@@ -378,7 +378,7 @@ module Bunny
|
|
378
378
|
# @see http://rubybunny.info/articles/exchanges.html Exchanges and Publishing guide
|
379
379
|
# @api public
|
380
380
|
def default_exchange
|
381
|
-
Exchange.default(self)
|
381
|
+
@default_exchange ||= Exchange.default(self)
|
382
382
|
end
|
383
383
|
|
384
384
|
# Declares a headers exchange or looks it up in the cache of previously
|
@@ -396,7 +396,7 @@ module Bunny
|
|
396
396
|
# @see http://rubybunny.info/articles/exchanges.html Exchanges and Publishing guide
|
397
397
|
# @see http://rubybunny.info/articles/extensions.html RabbitMQ Extensions to AMQP 0.9.1 guide
|
398
398
|
def exchange(name, opts = {})
|
399
|
-
Exchange.new(self, opts.fetch(:type, :direct), name, opts)
|
399
|
+
find_exchange(name) || Exchange.new(self, opts.fetch(:type, :direct), name, opts)
|
400
400
|
end
|
401
401
|
|
402
402
|
# @endgroup
|
@@ -70,7 +70,7 @@ module Bunny
|
|
70
70
|
return if !(wait_for_workers && @shutdown_timeout && was_running)
|
71
71
|
|
72
72
|
@shutdown_mutex.synchronize do
|
73
|
-
@shutdown_conditional.wait(@shutdown_mutex, @shutdown_timeout)
|
73
|
+
@shutdown_conditional.wait(@shutdown_mutex, @shutdown_timeout) if busy?
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
data/lib/bunny/session.rb
CHANGED
@@ -71,6 +71,7 @@ module Bunny
|
|
71
71
|
# Default reconnection interval for TCP connection failures
|
72
72
|
DEFAULT_NETWORK_RECOVERY_INTERVAL = 5.0
|
73
73
|
|
74
|
+
DEFAULT_RECOVERABLE_EXCEPTIONS = [StandardError, TCPConnectionFailedForAllHosts, TCPConnectionFailed, AMQ::Protocol::EmptyResponseError, SystemCallError, Timeout::Error, Bunny::ConnectionLevelException, Bunny::ConnectionClosedError]
|
74
75
|
|
75
76
|
#
|
76
77
|
# API
|
@@ -91,6 +92,7 @@ module Bunny
|
|
91
92
|
attr_reader :network_recovery_interval
|
92
93
|
attr_reader :connection_name
|
93
94
|
attr_accessor :socket_configurator
|
95
|
+
attr_accessor :recoverable_exceptions
|
94
96
|
|
95
97
|
# @param [String, Hash] connection_string_or_opts Connection string or a hash of connection options
|
96
98
|
# @param [Hash] optz Extra options not related to connection
|
@@ -126,6 +128,7 @@ module Bunny
|
|
126
128
|
# @option connection_string_or_opts [Integer] :reset_recovery_attempts_after_reconnection (true) Should recovery attempt counter be reset after successful reconnection? When set to false, the attempt counter will last through the entire lifetime of the connection object.
|
127
129
|
# @option connection_string_or_opts [Proc] :recovery_attempt_started (nil) Will be called before every connection recovery attempt
|
128
130
|
# @option connection_string_or_opts [Proc] :recovery_completed (nil) Will be called after successful connection recovery
|
131
|
+
# @option connection_string_or_opts [Proc] :recovery_attempts_exhausted (nil) Will be called when the connection recovery failed after the specified amount of recovery attempts
|
129
132
|
# @option connection_string_or_opts [Boolean] :recover_from_connection_close (true) Should this connection recover after receiving a server-sent connection.close (e.g. connection was force closed)?
|
130
133
|
# @option connection_string_or_opts [Object] :session_error_handler (Thread.current) Object which responds to #raise that will act as a session error handler. Defaults to Thread.current, which will raise asynchronous exceptions in the thread that created the session.
|
131
134
|
#
|
@@ -223,9 +226,12 @@ module Bunny
|
|
223
226
|
|
224
227
|
@recovery_attempt_started = opts[:recovery_attempt_started]
|
225
228
|
@recovery_completed = opts[:recovery_completed]
|
229
|
+
@recovery_attempts_exhausted = opts[:recovery_attempts_exhausted]
|
226
230
|
|
227
231
|
@session_error_handler = opts.fetch(:session_error_handler, Thread.current)
|
228
232
|
|
233
|
+
@recoverable_exceptions = DEFAULT_RECOVERABLE_EXCEPTIONS.dup
|
234
|
+
|
229
235
|
self.reset_continuations
|
230
236
|
self.initialize_transport
|
231
237
|
|
@@ -549,6 +555,12 @@ module Bunny
|
|
549
555
|
@recovery_completed = block
|
550
556
|
end
|
551
557
|
|
558
|
+
# Defines a callable (e.g. a block) that will be called
|
559
|
+
# when the connection recovery failed after the specified
|
560
|
+
# numbers of recovery attempts.
|
561
|
+
def after_recovery_attempts_exhausted(&block)
|
562
|
+
@recovery_attempts_exhausted = block
|
563
|
+
end
|
552
564
|
|
553
565
|
#
|
554
566
|
# Implementation
|
@@ -747,9 +759,7 @@ module Bunny
|
|
747
759
|
|
748
760
|
# @private
|
749
761
|
def recoverable_network_failure?(exception)
|
750
|
-
|
751
|
-
# So just recover unconditionally. MK.
|
752
|
-
true
|
762
|
+
@recoverable_exceptions.any? {|x| exception.kind_of? x}
|
753
763
|
end
|
754
764
|
|
755
765
|
# @private
|
@@ -794,19 +804,23 @@ module Bunny
|
|
794
804
|
rescue HostListDepleted
|
795
805
|
reset_address_index
|
796
806
|
retry
|
797
|
-
rescue
|
798
|
-
|
799
|
-
|
800
|
-
|
801
|
-
|
807
|
+
rescue => e
|
808
|
+
if recoverable_network_failure?(e)
|
809
|
+
@logger.warn "TCP connection failed"
|
810
|
+
if should_retry_recovery?
|
811
|
+
@logger.warn "Reconnecting in #{@network_recovery_interval} seconds"
|
812
|
+
decrement_recovery_attemp_counter!
|
802
813
|
announce_network_failure_recovery
|
803
814
|
retry
|
815
|
+
else
|
816
|
+
@logger.error "Ran out of recovery attempts (limit set to #{@max_recovery_attempts}), giving up"
|
817
|
+
@transport.close
|
818
|
+
self.close(false)
|
819
|
+
@manually_closed = false
|
820
|
+
notify_of_recovery_attempts_exhausted
|
804
821
|
end
|
805
822
|
else
|
806
|
-
|
807
|
-
@transport.close
|
808
|
-
self.close(false)
|
809
|
-
@manually_closed = false
|
823
|
+
raise e
|
810
824
|
end
|
811
825
|
end
|
812
826
|
|
@@ -854,6 +868,11 @@ module Bunny
|
|
854
868
|
@recovery_completed.call if @recovery_completed
|
855
869
|
end
|
856
870
|
|
871
|
+
# @private
|
872
|
+
def notify_of_recovery_attempts_exhausted
|
873
|
+
@recovery_attempts_exhausted.call if @recovery_attempts_exhausted
|
874
|
+
end
|
875
|
+
|
857
876
|
# @private
|
858
877
|
def instantiate_connection_level_exception(frame)
|
859
878
|
case frame
|
@@ -1356,7 +1375,7 @@ module Bunny
|
|
1356
1375
|
host_from_address(address),
|
1357
1376
|
port_from_address(address),
|
1358
1377
|
@opts.merge(:session_error_handler => @session_error_handler)
|
1359
|
-
|
1378
|
+
)
|
1360
1379
|
|
1361
1380
|
# Reset the cached progname for the logger only when no logger was provided
|
1362
1381
|
@default_logger.progname = self.to_s
|
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: 2.
|
4
|
+
version: 2.22.0
|
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: 2023-
|
15
|
+
date: 2023-06-12 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: amq-protocol
|
@@ -120,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
120
120
|
- !ruby/object:Gem::Version
|
121
121
|
version: '0'
|
122
122
|
requirements: []
|
123
|
-
rubygems_version: 3.
|
123
|
+
rubygems_version: 3.5.0.dev
|
124
124
|
signing_key:
|
125
125
|
specification_version: 4
|
126
126
|
summary: Popular easy to use Ruby client for RabbitMQ
|