bunny 2.3.1 → 2.4.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.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +71 -5
- data/ChangeLog.md +28 -1
- data/README.md +4 -48
- data/Rakefile +27 -0
- data/docker/Dockerfile +14 -0
- data/docker/docker-entrypoint.sh +40 -0
- data/lib/bunny.rb +2 -2
- data/lib/bunny/channel.rb +5 -23
- data/lib/bunny/queue.rb +0 -1
- data/lib/bunny/reader_loop.rb +2 -2
- data/lib/bunny/session.rb +4 -4
- data/lib/bunny/version.rb +1 -1
- data/spec/higher_level_api/integration/basic_qos_spec.rb +8 -2
- data/spec/stress/concurrent_consumers_stress_spec.rb +9 -6
- data/spec/stress/concurrent_publishers_stress_spec.rb +11 -14
- data/spec/stress/wait_for_confirms_with_connection_loss_stress_spec.rb +131 -0
- data/spec/tls/ca_certificate.pem +16 -16
- data/spec/tls/ca_key.pem +25 -25
- data/spec/tls/client_certificate.pem +16 -16
- data/spec/tls/client_key.pem +25 -25
- data/spec/tls/server_certificate.pem +16 -16
- data/spec/tls/server_key.pem +25 -25
- metadata +9 -9
- data/spec/tls/cacert.pem +0 -18
- data/spec/tls/client_cert.pem +0 -18
- data/spec/tls/server_cert.pem +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 790cbbf1db8e302bc827c5bea5f7402246666232
|
4
|
+
data.tar.gz: 5db72065394300e1836777389d4cefc96f2213b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a209a0ee2b9d6bb19616d647f7070dbf6834aff8faa3136e1ae452fa0aae5980c9bc4bffedb6a8f4062f92b3469580936c3c94deca3d386120543ae11f737538
|
7
|
+
data.tar.gz: ca0250521c37790299f627edf42db7598ddfe21d1cfd749f84745f5003c160d3c12fa52dbbb3c899aa709125f715bfe55c53697ef2bf05b0db89ec98b5ad6934
|
data/CONTRIBUTING.md
CHANGED
@@ -1,12 +1,78 @@
|
|
1
1
|
## Pre-requisites
|
2
2
|
|
3
|
-
The project uses Bundler for dependency management and requires RabbitMQ `3.
|
4
|
-
locally
|
5
|
-
|
6
|
-
|
3
|
+
The project uses Bundler for dependency management and requires RabbitMQ `3.5+` to be running
|
4
|
+
locally with the `rabbitmq-management` and `rabbitmq_consistent_hash_exchange` plugins enabled.
|
5
|
+
|
6
|
+
|
7
|
+
### Running the Specs
|
8
|
+
|
9
|
+
The specs require RabbitMQ to be running locally with a specific set of vhosts
|
10
|
+
and users. RabbitMQ can be provisioned and started any way that's convenient to you
|
11
|
+
as long as it has a suitable TLS keys configuration and management plugin enabled.
|
12
|
+
Make sure you have a recent version of RabbitMQ (> `3.5.3`).
|
13
|
+
|
14
|
+
You can also start a clean RabbitMQ server
|
15
|
+
node on your machine specifically for the bunny specs.
|
16
|
+
This can be done either by using a locally installed RabbitMQ server or by
|
17
|
+
running a RabbitMQ server in a Docker container.
|
18
|
+
|
19
|
+
#### Using a locally installed RabbitMQ server
|
20
|
+
|
21
|
+
Run the following command from the base directory of the gem:
|
22
|
+
|
23
|
+
```
|
24
|
+
RABBITMQ_NODENAME=bunny RABBITMQ_CONFIG_FILE=./spec/config/rabbitmq RABBITMQ_ENABLED_PLUGINS_FILE=./spec/config/enabled_plugins rabbitmq-server
|
25
|
+
```
|
26
|
+
|
27
|
+
The specs use the RabbitMQ management plugin and require a TLS port to be available. The config files in the spec/config directory enable these.
|
28
|
+
|
29
|
+
Next up you'll need to prepare your node for the specs (just once):
|
30
|
+
|
31
|
+
```
|
32
|
+
RABBITMQ_NODENAME=bunny ./bin/ci/before_build
|
33
|
+
```
|
34
|
+
|
35
|
+
And then run the core integration suite:
|
36
|
+
|
37
|
+
```
|
38
|
+
RABBITMQ_NODENAME=bunny CI=true rspec
|
39
|
+
```
|
40
|
+
|
41
|
+
#### Running a RabbitMQ server in a Docker container
|
42
|
+
|
43
|
+
First off you have to [install Docker](https://docs.docker.com/engine/installation/) (>= 1.9).
|
44
|
+
|
45
|
+
After Docker has been installed (and the `docker` command is available on your command line path), run
|
46
|
+
|
47
|
+
./bin/ci/start_rabbitmq
|
48
|
+
|
49
|
+
The first time you do this, it will take some time, since it has to download everything it needs
|
50
|
+
to build the Docker image.
|
51
|
+
|
52
|
+
The RabbitMQ server will run in the foreground in the terminal where you started it. You can stop
|
53
|
+
it by pressing CTRL+C.
|
54
|
+
|
55
|
+
### Running Test Suites
|
56
|
+
|
57
|
+
Prior to running the tests, configure the RabbitMQ permissions
|
58
|
+
by running `./bin/ci/before_script`. The script uses `rabbitmqctl` and `rabbitmq-plugins`
|
59
|
+
to set up RabbitMQ in a way that Bunny test suites expect. Two environment variables,
|
60
|
+
`RABBITMQCTL` and `RABBITMQ_PLUGINS`, are available to control what `rabbitmqctl` and
|
61
|
+
`rabbitmq-plugins` commands will be used. By default they are taken from `PATH`
|
62
|
+
and prefixed with `sudo`.
|
63
|
+
|
64
|
+
Make sure you have those two installed and then run integration tests:
|
7
65
|
|
8
66
|
bundle install
|
9
|
-
|
67
|
+
rake integration
|
68
|
+
|
69
|
+
It is possible to run all tests:
|
70
|
+
|
71
|
+
bundle exec rspec -c
|
72
|
+
|
73
|
+
It is possible to run only integration and regression tests but exclude unit and stress tests:
|
74
|
+
|
75
|
+
CI=true bundle exec rspec -c spec/higher_level_api/ spec/lower_level_api spec/issues && bundle exec rspec -c spec/higher_level_api/integration/connection_recovery_spec.rb
|
10
76
|
|
11
77
|
## Pull Requests
|
12
78
|
|
data/ChangeLog.md
CHANGED
@@ -1,4 +1,13 @@
|
|
1
|
-
## Changes between Bunny 2.3.0 and 2.
|
1
|
+
## Changes between Bunny 2.3.0 and 2.4.0 (unreleased)
|
2
|
+
|
3
|
+
### Unconfirmed Delivery Tag Set Reset on Network Recovery
|
4
|
+
|
5
|
+
Channels will now reset their unconfirmed delivery tag set after
|
6
|
+
recovery.
|
7
|
+
|
8
|
+
GitHub issue: [#406](https://github.com/ruby-amqp/bunny/pull/406)
|
9
|
+
|
10
|
+
Contributed by Bill Ruddock.
|
2
11
|
|
3
12
|
### Support (Quoted) IPv6 Addresses in Address Lists
|
4
13
|
|
@@ -15,6 +24,22 @@ GitHub issue: [#359](https://github.com/ruby-amqp/bunny/issues/359)
|
|
15
24
|
|
16
25
|
Contributed by Donal McBreen.
|
17
26
|
|
27
|
+
### Client-Provided Session `:properties` Merged with Defaults
|
28
|
+
|
29
|
+
Client-Provided Session `:properties` will now be merged with defaults
|
30
|
+
instead of replacing them. This makes it much more convenient to
|
31
|
+
override a single key.
|
32
|
+
|
33
|
+
### More Predictable RABBITMQ_URL Handling
|
34
|
+
|
35
|
+
`RABBITMQ_URL` no longer will be used if any other
|
36
|
+
connection options are provided. This makes it possible
|
37
|
+
to use `RABBITMQ_URL` for some connections and options
|
38
|
+
for others in a single OS process.
|
39
|
+
|
40
|
+
GitHub issue: [#403](https://github.com/ruby-amqp/bunny/pull/403)
|
41
|
+
|
42
|
+
Contributed by Jimmy Petersen.
|
18
43
|
|
19
44
|
|
20
45
|
## Changes between Bunny 2.2.0 and 2.3.0 (Feb 26th, 2016)
|
@@ -25,6 +50,8 @@ Contributed by Donal McBreen.
|
|
25
50
|
when set to `true`, makes consumer work pool threads to have
|
26
51
|
`Thread#abort_on_exception` set on them.
|
27
52
|
|
53
|
+
GH issue: [#382](https://github.com/ruby-amqp/bunny/pull/382)
|
54
|
+
|
28
55
|
Contributed by Seamus Abshere.
|
29
56
|
|
30
57
|
### Explicit Transport Closure on Recovery
|
data/README.md
CHANGED
@@ -48,7 +48,7 @@ Specific examples:
|
|
48
48
|
|
49
49
|
Modern Bunny versions support
|
50
50
|
|
51
|
-
* CRuby 2.
|
51
|
+
* CRuby 2.0 through 2.3
|
52
52
|
|
53
53
|
Bunny works sufficiently well on JRuby but there are known
|
54
54
|
JRuby bugs in versions prior to JRuby 9000 that cause high CPU burn. JRuby users should
|
@@ -88,7 +88,7 @@ gem install bunny
|
|
88
88
|
To use Bunny in a project managed with Bundler:
|
89
89
|
|
90
90
|
``` ruby
|
91
|
-
gem "bunny", ">= 2.
|
91
|
+
gem "bunny", ">= 2.3.1"
|
92
92
|
```
|
93
93
|
|
94
94
|
|
@@ -183,36 +183,6 @@ try to explain what behavior you expected and why. Bonus points for
|
|
183
183
|
contributing failing test cases.
|
184
184
|
|
185
185
|
|
186
|
-
### Running the Specs
|
187
|
-
|
188
|
-
The specs require RabbitMQ to be running locally with a specific set of vhosts
|
189
|
-
and users. RabbitMQ can be provisioned and started any that's convenient to you
|
190
|
-
as long as it has a suitable TLS keys configuration and management plugin enabled.
|
191
|
-
Make sure you have a recent version of RabbitMQ (> `3.5.3`).
|
192
|
-
|
193
|
-
You can also start a clean RabbitMQ server
|
194
|
-
node on your machine specifically for the bunny specs.
|
195
|
-
To do so, run the following command
|
196
|
-
from the base directory of the gem:
|
197
|
-
|
198
|
-
```
|
199
|
-
RABBITMQ_NODENAME=bunny RABBITMQ_CONFIG_FILE=./spec/config/rabbitmq RABBITMQ_ENABLED_PLUGINS_FILE=./spec/config/enabled_plugins rabbitmq-server
|
200
|
-
```
|
201
|
-
|
202
|
-
The specs use the RabbitMQ management plugin and require a TLS port to be available. The config files in the spec/config directory enable these.
|
203
|
-
|
204
|
-
Next up you'll need to prepare your node for the specs (just once):
|
205
|
-
|
206
|
-
```
|
207
|
-
RABBITMQ_NODENAME=bunny ./bin/ci/before_build
|
208
|
-
```
|
209
|
-
|
210
|
-
And then run the core integration suite:
|
211
|
-
|
212
|
-
```
|
213
|
-
RABBITMQ_NODENAME=bunny CI=true rspec
|
214
|
-
```
|
215
|
-
|
216
186
|
## Other Ruby RabbitMQ Clients
|
217
187
|
|
218
188
|
The other widely used Ruby RabbitMQ client is [March Hare](http://rubymarchhare.info) (JRuby-only).
|
@@ -221,22 +191,8 @@ It's a mature library that require RabbitMQ 3.3.x or later.
|
|
221
191
|
|
222
192
|
## Contributing
|
223
193
|
|
224
|
-
|
225
|
-
|
226
|
-
bundle install --binstubs
|
227
|
-
|
228
|
-
then set up RabbitMQ vhosts with
|
229
|
-
|
230
|
-
./bin/ci/before_build
|
231
|
-
|
232
|
-
(if needed, set `RABBITMQCTL` env variable to point to `rabbitmqctl` you want to use)
|
233
|
-
|
234
|
-
and then run tests with
|
235
|
-
|
236
|
-
CI=true ./bin/rspec -cf documentation spec
|
237
|
-
|
238
|
-
After that create a branch and make your changes on it. Once you are done with your changes and all tests pass, submit a pull request
|
239
|
-
on GitHub.
|
194
|
+
See [CONTRIBUTING.md](./CONTRIBUTING.md) for more information
|
195
|
+
about running various test suites.
|
240
196
|
|
241
197
|
|
242
198
|
## License
|
data/Rakefile
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
|
4
|
+
RSpec::Core::RakeTask.new(:integration) do |t|
|
5
|
+
# excludes unit tests as those involve many iterations
|
6
|
+
# and sometimes suffer from obscure interference from integration tests (!)
|
7
|
+
t.pattern = ["spec/higher_level_api/integration", "spec/lower_level_api/integration", "spec/issues", "spec/stress"].
|
8
|
+
map { |dir| Dir.glob(File.join(dir, "**", "*_spec.rb")) }.reduce(&:+) - ["spec/higher_level_api/integration/tls_connection_spec.rb"]
|
9
|
+
|
10
|
+
t.rspec_opts = "--format progress"
|
11
|
+
end
|
12
|
+
|
13
|
+
RSpec::Core::RakeTask.new(:unit) do |t|
|
14
|
+
t.pattern = Dir.glob("spec/unit/**/*_spec.rb")
|
15
|
+
|
16
|
+
t.rspec_opts = "--format progress --backtrace"
|
17
|
+
end
|
18
|
+
|
19
|
+
RSpec::Core::RakeTask.new(:recovery_integration) do |t|
|
20
|
+
# otherwise all examples will be skipped
|
21
|
+
ENV.delete("CI")
|
22
|
+
t.pattern = Dir.glob("spec/higher_level_api/integration/connection_recovery_spec.rb")
|
23
|
+
|
24
|
+
t.rspec_opts = "--format progress --backtrace"
|
25
|
+
end
|
26
|
+
|
27
|
+
task :default => :integration
|
data/docker/Dockerfile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
FROM debian:jessie
|
2
|
+
|
3
|
+
RUN apt-get -q update && \
|
4
|
+
apt-get install -yq --no-install-recommends wget ca-certificates
|
5
|
+
|
6
|
+
RUN echo 'deb http://www.rabbitmq.com/debian/ testing main' > /etc/apt/sources.list.d/rabbitmq.list && \
|
7
|
+
wget -O- https://www.rabbitmq.com/rabbitmq-signing-key-public.asc | apt-key add -
|
8
|
+
|
9
|
+
RUN apt-get -q update && \
|
10
|
+
apt-get install -yq --no-install-recommends rabbitmq-server
|
11
|
+
|
12
|
+
COPY docker-entrypoint.sh /
|
13
|
+
|
14
|
+
ENTRYPOINT /docker-entrypoint.sh
|
@@ -0,0 +1,40 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
server=rabbitmq-server
|
3
|
+
ctl=rabbitmqctl
|
4
|
+
plugins=rabbitmq-plugins
|
5
|
+
delay=3
|
6
|
+
|
7
|
+
echo '[Configuration] Starting RabbitMQ in detached mode.'
|
8
|
+
|
9
|
+
$server -detached
|
10
|
+
|
11
|
+
echo "[Configuration] Waiting $delay seconds for RabbitMQ to start."
|
12
|
+
|
13
|
+
sleep $delay
|
14
|
+
|
15
|
+
echo '*** Enabling plugins ***'
|
16
|
+
$plugins enable --online rabbitmq_management
|
17
|
+
$plugins enable --online rabbitmq_consistent_hash_exchange
|
18
|
+
|
19
|
+
echo '*** Creating users ***'
|
20
|
+
$ctl add_user bunny_gem bunny_password
|
21
|
+
$ctl add_user bunny_reader reader_password
|
22
|
+
|
23
|
+
echo '*** Creating virtual hosts ***'
|
24
|
+
$ctl add_vhost bunny_testbed
|
25
|
+
|
26
|
+
echo '*** Setting virtual host permissions ***'
|
27
|
+
$ctl set_permissions -p / guest '.*' '.*' '.*'
|
28
|
+
$ctl set_permissions -p bunny_testbed bunny_gem '.*' '.*' '.*'
|
29
|
+
$ctl set_permissions -p bunny_testbed guest '.*' '.*' '.*'
|
30
|
+
$ctl set_permissions -p bunny_testbed bunny_reader '^---$' '^---$' '.*'
|
31
|
+
|
32
|
+
$ctl stop
|
33
|
+
|
34
|
+
echo "[Configuration] Waiting $delay seconds for RabbitMQ to stop."
|
35
|
+
|
36
|
+
sleep $delay
|
37
|
+
|
38
|
+
echo 'Starting RabbitMQ in foreground (CTRL-C to exit)'
|
39
|
+
|
40
|
+
exec $server
|
data/lib/bunny.rb
CHANGED
@@ -58,7 +58,7 @@ module Bunny
|
|
58
58
|
# @see http://rubybunny.info/articles/getting_started.html
|
59
59
|
# @see http://rubybunny.info/articles/connecting.html
|
60
60
|
# @api public
|
61
|
-
def self.new(connection_string_or_opts =
|
61
|
+
def self.new(connection_string_or_opts = ENV['RABBITMQ_URL'], opts = {}, &block)
|
62
62
|
if connection_string_or_opts.respond_to?(:keys) && opts.empty?
|
63
63
|
opts = connection_string_or_opts
|
64
64
|
end
|
@@ -70,7 +70,7 @@ module Bunny
|
|
70
70
|
end
|
71
71
|
|
72
72
|
|
73
|
-
def self.run(connection_string_or_opts =
|
73
|
+
def self.run(connection_string_or_opts = ENV['RABBITMQ_URL'], opts = {}, &block)
|
74
74
|
raise ArgumentError, 'Bunny#run requires a block' unless block
|
75
75
|
|
76
76
|
client = Session.new(connection_string_or_opts, opts)
|
data/lib/bunny/channel.rb
CHANGED
@@ -366,7 +366,7 @@ module Bunny
|
|
366
366
|
# @see http://rubybunny.info/articles/exchanges.html Exchanges and Publishing guide
|
367
367
|
# @api public
|
368
368
|
def default_exchange
|
369
|
-
|
369
|
+
Exchange.default(self)
|
370
370
|
end
|
371
371
|
|
372
372
|
# Declares a headers exchange or looks it up in the cache of previously
|
@@ -427,26 +427,6 @@ module Bunny
|
|
427
427
|
|
428
428
|
# @group QoS and Flow Control
|
429
429
|
|
430
|
-
# Sets how many messages will be given to consumers on this channel before they
|
431
|
-
# have to acknowledge or reject one of the previously consumed messages
|
432
|
-
#
|
433
|
-
# @param [Integer] prefetch_count Prefetch (QoS setting) for this channel
|
434
|
-
# @param [Boolean] global
|
435
|
-
# Whether to use global mode for prefetch:
|
436
|
-
# - +false+: per-consumer
|
437
|
-
# - +true+: per-channel
|
438
|
-
# Note that the default value (+false+) hasn't actually changed, but
|
439
|
-
# previous documentation described that as meaning per-channel and
|
440
|
-
# unsupported in RabbitMQ, whereas it now actually appears to mean
|
441
|
-
# per-consumer and supported
|
442
|
-
# (https://www.rabbitmq.com/consumer-prefetch.html).
|
443
|
-
# @see http://rubybunny.info/articles/exchanges.html Exchanges and Publishing guide
|
444
|
-
# @see http://rubybunny.info/articles/queues.html Queues and Consumers guide
|
445
|
-
# @api public
|
446
|
-
def prefetch(count, global = false)
|
447
|
-
self.basic_qos(count, global)
|
448
|
-
end
|
449
|
-
|
450
430
|
# Flow control. When set to false, RabbitMQ will stop delivering messages on this
|
451
431
|
# channel.
|
452
432
|
#
|
@@ -649,8 +629,8 @@ module Bunny
|
|
649
629
|
# @see http://rubybunny.info/articles/queues.html Queues and Consumers guide
|
650
630
|
# @api public
|
651
631
|
def basic_qos(count, global = false)
|
652
|
-
raise ArgumentError.new("prefetch count must be a positive integer, given: #{
|
653
|
-
raise ArgumentError.new("prefetch count must be no greater than #{MAX_PREFETCH_COUNT}, given: #{
|
632
|
+
raise ArgumentError.new("prefetch count must be a positive integer, given: #{count}") if count < 0
|
633
|
+
raise ArgumentError.new("prefetch count must be no greater than #{MAX_PREFETCH_COUNT}, given: #{count}") if count > MAX_PREFETCH_COUNT
|
654
634
|
raise_if_no_longer_open!
|
655
635
|
|
656
636
|
@connection.send_frame(AMQ::Protocol::Basic::Qos.encode(@id, 0, count, global))
|
@@ -665,6 +645,7 @@ module Bunny
|
|
665
645
|
|
666
646
|
@last_basic_qos_ok
|
667
647
|
end
|
648
|
+
alias prefetch basic_qos
|
668
649
|
|
669
650
|
# Redeliver unacknowledged messages
|
670
651
|
#
|
@@ -1514,6 +1495,7 @@ module Bunny
|
|
1514
1495
|
# @api plugin
|
1515
1496
|
def recover_confirm_mode
|
1516
1497
|
if using_publisher_confirmations?
|
1498
|
+
@unconfirmed_set.clear
|
1517
1499
|
@delivery_tag_offset = @next_publish_seq_no - 1
|
1518
1500
|
confirm_select(@confirms_callback)
|
1519
1501
|
end
|
data/lib/bunny/queue.rb
CHANGED
data/lib/bunny/reader_loop.rb
CHANGED
@@ -92,11 +92,11 @@ module Bunny
|
|
92
92
|
end
|
93
93
|
|
94
94
|
def stopped?
|
95
|
-
@mutex.synchronize { @stopped
|
95
|
+
@mutex.synchronize { @stopped }
|
96
96
|
end
|
97
97
|
|
98
98
|
def stopping?
|
99
|
-
@mutex.synchronize { @stopping
|
99
|
+
@mutex.synchronize { @stopping }
|
100
100
|
end
|
101
101
|
|
102
102
|
def terminate_with(e)
|
data/lib/bunny/session.rb
CHANGED
@@ -125,12 +125,12 @@ module Bunny
|
|
125
125
|
# @see http://rubybunny.info/articles/connecting.html Connecting to RabbitMQ guide
|
126
126
|
# @see http://rubybunny.info/articles/tls.html TLS/SSL guide
|
127
127
|
# @api public
|
128
|
-
def initialize(connection_string_or_opts =
|
129
|
-
opts = case (
|
128
|
+
def initialize(connection_string_or_opts = ENV['RABBITMQ_URL'], optz = Hash.new)
|
129
|
+
opts = case (connection_string_or_opts)
|
130
130
|
when nil then
|
131
131
|
Hash.new
|
132
132
|
when String then
|
133
|
-
self.class.parse_uri(
|
133
|
+
self.class.parse_uri(connection_string_or_opts)
|
134
134
|
when Hash then
|
135
135
|
connection_string_or_opts
|
136
136
|
end.merge(optz)
|
@@ -179,7 +179,7 @@ module Bunny
|
|
179
179
|
@channel_max = @client_channel_max
|
180
180
|
@client_heartbeat = self.heartbeat_from(opts)
|
181
181
|
|
182
|
-
@client_properties = opts
|
182
|
+
@client_properties = DEFAULT_CLIENT_PROPERTIES.merge(opts.fetch(:properties, {}))
|
183
183
|
@mechanism = opts.fetch(:auth_mechanism, "PLAIN")
|
184
184
|
@credentials_encoder = credentials_encoder_for(@mechanism)
|
185
185
|
@locale = @opts.fetch(:locale, DEFAULT_LOCALE)
|
data/lib/bunny/version.rb
CHANGED
@@ -36,7 +36,10 @@ describe Bunny::Channel, "#prefetch" do
|
|
36
36
|
ch = connection.create_channel
|
37
37
|
expect {
|
38
38
|
ch.prefetch(100_000)
|
39
|
-
}.to raise_error(
|
39
|
+
}.to raise_error(
|
40
|
+
ArgumentError,
|
41
|
+
"prefetch count must be no greater than #{Bunny::Channel::MAX_PREFETCH_COUNT}, given: 100000"
|
42
|
+
)
|
40
43
|
end
|
41
44
|
end
|
42
45
|
|
@@ -45,7 +48,10 @@ describe Bunny::Channel, "#prefetch" do
|
|
45
48
|
ch = connection.create_channel
|
46
49
|
expect {
|
47
50
|
ch.prefetch(-2)
|
48
|
-
}.to raise_error(
|
51
|
+
}.to raise_error(
|
52
|
+
ArgumentError,
|
53
|
+
"prefetch count must be a positive integer, given: -2"
|
54
|
+
)
|
49
55
|
end
|
50
56
|
end
|
51
57
|
end
|
@@ -5,7 +5,7 @@ unless ENV["CI"]
|
|
5
5
|
describe "Concurrent consumers sharing a connection" do
|
6
6
|
before :all do
|
7
7
|
@connection = Bunny.new(:user => "bunny_gem", :password => "bunny_password", :vhost => "bunny_testbed",
|
8
|
-
:automatic_recovery => false
|
8
|
+
:automatic_recovery => false)
|
9
9
|
@connection.start
|
10
10
|
end
|
11
11
|
|
@@ -21,12 +21,13 @@ unless ENV["CI"]
|
|
21
21
|
let(:colors) { ["red", "blue", "white"] }
|
22
22
|
|
23
23
|
let(:n) { 32 }
|
24
|
-
let(:m) {
|
24
|
+
let(:m) { 5000 }
|
25
25
|
|
26
26
|
it "successfully drain all queues" do
|
27
|
-
|
27
|
+
ch0 = @connection.create_channel
|
28
|
+
ch0.confirm_select
|
28
29
|
body = "абвг"
|
29
|
-
x =
|
30
|
+
x = ch0.topic("bunny.stress.concurrent.consumers.topic", :durable => true)
|
30
31
|
|
31
32
|
chs = {}
|
32
33
|
n.times do |i|
|
@@ -54,14 +55,16 @@ unless ENV["CI"]
|
|
54
55
|
x.publish(body, :routing_key => colors.sample)
|
55
56
|
end
|
56
57
|
puts "Published #{(i + 1) * m} messages..."
|
58
|
+
ch0.wait_for_confirms
|
57
59
|
end
|
58
60
|
|
59
61
|
while any_not_drained?(qs)
|
60
62
|
sleep 1.0
|
61
63
|
end
|
62
|
-
puts "Drained all
|
64
|
+
puts "Drained all queues, winding down..."
|
63
65
|
|
64
|
-
|
66
|
+
ch0.close
|
67
|
+
chs.each { |_, ch| ch.close }
|
65
68
|
end
|
66
69
|
end
|
67
70
|
end
|
@@ -4,7 +4,7 @@ require "spec_helper"
|
|
4
4
|
unless ENV["CI"]
|
5
5
|
describe "Concurrent publishers sharing a connection" do
|
6
6
|
before :all do
|
7
|
-
@connection = Bunny.new(:user => "bunny_gem", :password => "bunny_password", :vhost => "bunny_testbed", :automatically_recover => false
|
7
|
+
@connection = Bunny.new(:user => "bunny_gem", :password => "bunny_password", :vhost => "bunny_testbed", :automatically_recover => false)
|
8
8
|
@connection.start
|
9
9
|
end
|
10
10
|
|
@@ -16,17 +16,13 @@ unless ENV["CI"]
|
|
16
16
|
let(:rate) { 5_000 }
|
17
17
|
|
18
18
|
it "successfully finish publishing" do
|
19
|
-
ch = @connection.create_channel
|
20
|
-
|
21
|
-
q = ch.queue("", :exclusive => true)
|
22
19
|
body = "сообщение"
|
23
20
|
|
24
|
-
# let the queue name be sent back by RabbitMQ
|
25
|
-
sleep 0.25
|
26
|
-
|
27
21
|
chs = {}
|
28
22
|
concurrency.times do |i|
|
29
|
-
|
23
|
+
ch = @connection.create_channel
|
24
|
+
ch.confirm_select
|
25
|
+
chs[i] = ch
|
30
26
|
end
|
31
27
|
|
32
28
|
ts = []
|
@@ -34,14 +30,13 @@ unless ENV["CI"]
|
|
34
30
|
concurrency.times do |i|
|
35
31
|
t = Thread.new do
|
36
32
|
cht = chs[i]
|
37
|
-
x =
|
33
|
+
x = cht.default_exchange
|
38
34
|
|
39
|
-
|
40
|
-
|
41
|
-
x.publish(body, :routing_key => q.name)
|
42
|
-
end
|
43
|
-
puts "Published #{(i + 1) * rate} messages..."
|
35
|
+
rate.times do
|
36
|
+
x.publish(body)
|
44
37
|
end
|
38
|
+
puts "Published #{rate} messages..."
|
39
|
+
cht.wait_for_confirms
|
45
40
|
end
|
46
41
|
t.abort_on_exception = true
|
47
42
|
|
@@ -51,6 +46,8 @@ unless ENV["CI"]
|
|
51
46
|
ts.each do |t|
|
52
47
|
t.join
|
53
48
|
end
|
49
|
+
|
50
|
+
chs.each { |_, ch| ch.close }
|
54
51
|
end
|
55
52
|
end
|
56
53
|
end
|
@@ -0,0 +1,131 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
unless ENV["CI"]
|
4
|
+
describe "Publisher with wait_for_confirms suffering a lost connection" do
|
5
|
+
before :all do
|
6
|
+
@connection = Bunny.new(
|
7
|
+
:user => "bunny_gem",
|
8
|
+
:password => "bunny_password",
|
9
|
+
:vhost => "bunny_testbed",
|
10
|
+
:recover_from_connection_close => true,
|
11
|
+
:network_recovery_interval => 0.2,
|
12
|
+
:recovery_attempts => 3,
|
13
|
+
:continuation_timeout => 3_000)
|
14
|
+
@connection.start
|
15
|
+
end
|
16
|
+
|
17
|
+
after :all do
|
18
|
+
@connection.close
|
19
|
+
end
|
20
|
+
|
21
|
+
let(:rate) { 50 }
|
22
|
+
let(:inner_rate) { 5 }
|
23
|
+
let(:max_retries) { 3 }
|
24
|
+
let(:routing_key) { 'confirms' }
|
25
|
+
|
26
|
+
let(:http_client) { RabbitMQ::HTTP::Client.new('http://127.0.0.1:15672') }
|
27
|
+
|
28
|
+
let!(:ch_pub) { @connection.create_channel.tap { |ch| ch.confirm_select } }
|
29
|
+
let!(:ch_sub) { @connection.create_channel }
|
30
|
+
let!(:topic) { 'bunny.stress.concurrent.confirms.topic' }
|
31
|
+
let!(:x) { ch_pub.topic(topic, :durable => true) }
|
32
|
+
let!(:q) do
|
33
|
+
ch_sub.queue('', :durable => true).tap do |q|
|
34
|
+
q.bind(x.name, :routing_key => routing_key)
|
35
|
+
q.purge
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def close_all_connections!
|
40
|
+
http_client.list_connections.each do |conn_info|
|
41
|
+
begin
|
42
|
+
http_client.close_connection(conn_info.name)
|
43
|
+
rescue Bunny::ConnectionForced => e
|
44
|
+
# This is not a problem, but the specs intermittently believe it is.
|
45
|
+
printf "Rescued forced connection: #{e.inspect}\n"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def wait_for_recovery
|
51
|
+
sleep 1.5
|
52
|
+
end
|
53
|
+
|
54
|
+
after do
|
55
|
+
unless ch_sub.closed?
|
56
|
+
q.delete
|
57
|
+
ch_sub.close
|
58
|
+
end
|
59
|
+
ch_pub.close unless ch_pub.closed?
|
60
|
+
end
|
61
|
+
|
62
|
+
it "successfully publish and consume all messages" do
|
63
|
+
begin
|
64
|
+
subscriber_mutex = Mutex.new
|
65
|
+
ids_received = Set.new
|
66
|
+
message_count = nil
|
67
|
+
|
68
|
+
sub = Thread.new do
|
69
|
+
begin
|
70
|
+
q.subscribe do |delivery_info, meta, payload|
|
71
|
+
subscriber_mutex.synchronize do
|
72
|
+
ids_received << payload.to_i
|
73
|
+
message_count = q.message_count
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
sub.abort_on_exception = true
|
79
|
+
|
80
|
+
pub = Thread.new do
|
81
|
+
rate.times do |i|
|
82
|
+
retries = 0
|
83
|
+
begin
|
84
|
+
inner_rate.times do |j|
|
85
|
+
id = i * inner_rate + j
|
86
|
+
x.publish(id.to_s, :routing_key => routing_key)
|
87
|
+
end
|
88
|
+
until ch_pub.unconfirmed_set.empty?
|
89
|
+
unless ch_pub.wait_for_confirms
|
90
|
+
raise "Not all messages acknowledged, nacks: #{ch_pub.nacked_set.inspect}"
|
91
|
+
end
|
92
|
+
end
|
93
|
+
rescue => e
|
94
|
+
puts "Rescued error in iteration #{i}: #{e.inspect}"
|
95
|
+
retries += 1
|
96
|
+
raise if retries > max_retries
|
97
|
+
|
98
|
+
puts "sleeping before retry #{retries}"
|
99
|
+
sleep 0.5
|
100
|
+
retry
|
101
|
+
end
|
102
|
+
end
|
103
|
+
puts "Published #{rate * inner_rate} messages..."
|
104
|
+
end
|
105
|
+
pub.abort_on_exception = true
|
106
|
+
sleep 0.2 while ids_received.size < 10
|
107
|
+
|
108
|
+
close_all_connections!
|
109
|
+
wait_for_recovery
|
110
|
+
|
111
|
+
pub.join
|
112
|
+
|
113
|
+
sleep 0.1 until message_count == 0
|
114
|
+
puts "Drained queue, winding down..."
|
115
|
+
|
116
|
+
q.delete
|
117
|
+
ch_pub.close
|
118
|
+
ch_sub.close
|
119
|
+
sub.kill
|
120
|
+
|
121
|
+
expect(ch_pub.unconfirmed_set).to be_empty
|
122
|
+
|
123
|
+
expected_ids = Set.new((rate * inner_rate).times)
|
124
|
+
missing_ids = expected_ids - ids_received
|
125
|
+
expect(missing_ids).to eq(Set.new)
|
126
|
+
ensure
|
127
|
+
sub.kill
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
data/spec/tls/ca_certificate.pem
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
-----BEGIN CERTIFICATE-----
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
2
|
+
MIIC7jCCAdagAwIBAgIJAPo+qW/K5mHrMA0GCSqGSIb3DQEBCwUAMCcxFTATBgNV
|
3
|
+
BAMMDE15VGVzdFJvb3RDQTEOMAwGA1UEBwwFOTEzNDMwHhcNMTYwMjI5MTA0NDA3
|
4
|
+
WhcNMjYwMjI2MTA0NDA3WjAnMRUwEwYDVQQDDAxNeVRlc3RSb290Q0ExDjAMBgNV
|
5
|
+
BAcMBTkxMzQzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqwGrw1hf
|
6
|
+
6LELt8euMTsRO7qnIsfH8yAeysK1GQgsWGuede7WcO9sXrtQOySDzb3cNkVoYKWt
|
7
|
+
b6O44S+jFqCUVRwLLMbhJtUTVYuOmFbpEc6XEgJEi3GqQqfLUnU1ODHcqEuDYZ6i
|
8
|
+
B0Iq2FDX+tu3AOBi8u653d7ccX5peVRF8ldZtyForjOJQ2M5Ya4pEW1JWX59XnY2
|
9
|
+
7tkw6wLHrHobwNy4laKibZGhS9KzHlNm4SKnGu/nMYEDjOk68j8CaKxoFNPZFfm9
|
10
|
+
qluADql2jj5nML5Axj1E3ZO3m+mc/KtZzFZByNdVtwoO04fdBK21Lxj8gPo2xCxu
|
11
|
+
V2A45yNb3/Q7LQIDAQABox0wGzAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAN
|
12
|
+
BgkqhkiG9w0BAQsFAAOCAQEAlB1Aljx2WMfhFmfIgD5PchizCquxQG3D0IvXyZwC
|
13
|
+
B2aGN9we4BkBBh+YzqD/VP0QNdqkmtAXmp+rGdzMgSzMFudtowRj534JfZ6nOFXC
|
14
|
+
KgNAKEznsJw6/voRYv+f5fciFB5h/sLBI5biIiyutpZKGkxJ9/yaOjJ7tT8MMP5r
|
15
|
+
WDlNEvvvgeT3ORuRma1yeg9oIVLJUamt/TuztOAeIGXW+34t87WGrt/ITGeMeJTk
|
16
|
+
/OFdjLOf3onOsANfoYuBJHvsmVNy/RF6TGd16DON3BR2DNdgnUUH6mee0VfXQ5vj
|
17
|
+
+ADCC7P2lHBPc7uShFtLi8EEj35/TALnHavrD6fuObKgLQ==
|
18
18
|
-----END CERTIFICATE-----
|
data/spec/tls/ca_key.pem
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
-----BEGIN RSA PRIVATE KEY-----
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
2
|
+
MIIEowIBAAKCAQEAqwGrw1hf6LELt8euMTsRO7qnIsfH8yAeysK1GQgsWGuede7W
|
3
|
+
cO9sXrtQOySDzb3cNkVoYKWtb6O44S+jFqCUVRwLLMbhJtUTVYuOmFbpEc6XEgJE
|
4
|
+
i3GqQqfLUnU1ODHcqEuDYZ6iB0Iq2FDX+tu3AOBi8u653d7ccX5peVRF8ldZtyFo
|
5
|
+
rjOJQ2M5Ya4pEW1JWX59XnY27tkw6wLHrHobwNy4laKibZGhS9KzHlNm4SKnGu/n
|
6
|
+
MYEDjOk68j8CaKxoFNPZFfm9qluADql2jj5nML5Axj1E3ZO3m+mc/KtZzFZByNdV
|
7
|
+
twoO04fdBK21Lxj8gPo2xCxuV2A45yNb3/Q7LQIDAQABAoIBAEHD3r69mgTvMcZ3
|
8
|
+
8LHWOYZy/hwOIQOLcswfnW4HCqbmnIZWV/oO2eqEtxJHtLjHL41fnAivLsgketF/
|
9
|
+
dIUbNHCW3GVYBvbcMxdPGIPVyMSkYsz2Ok42ZHhF95e6o8D8zBOdFuXQEBgihj+y
|
10
|
+
t50uKm8X3HX5AVomfzjWmNGka1ILTNautO0QkxBRgyDaeWqj5J46G68a6xtFPj6Q
|
11
|
+
6UqdAwD94TDkxlWBvEOYKRh51+uhGX936uXV8wu0ZDQ3oJ+pvdJSNClcFcuWztlq
|
12
|
+
7qn4UEdta26uTB7bhAzTaY7fxiY4VqJFc3HMLr7lfYz5vzda1cYLT6iR1qEI0+LS
|
13
|
+
K690+TECgYEA2RFcxptiEdyST+WH9LOqQ4J1vq/L4ZN9rLHKaEc38StSxheA71fZ
|
14
|
+
mFfnz2SemMjTaiN5/BgU52WUfpUtKqCfZfWMzjXFTzcVgjc+rSHZQQlg6NRbWbMm
|
15
|
+
LlXN0CkhL2mi6hilqQjgasyfieZ0prifHlWLZsjNIbsLtqGdMtzCN5cCgYEAya1p
|
16
|
+
LrDjbEKmn5kurD/i9t3+m+RZiqOhydJwUcoyYtWPc1aKH2COSqKyaLIo/5sp2TfN
|
17
|
+
Ptt+89+/1VgIkjEsW795rlQdhovY9eqoLPQ5+o/iadIDH876FMnfR7RIaxYhmXrZ
|
18
|
+
FkgGxqbcAnxyizi9lYRbiYiKftbCZkg5rAXUW9sCgYBq8GnTkrOC9zbB0+PiAy2L
|
19
|
+
qtcVRYhdLouIq+J68zM1RlG2M9gakh4qNoyGmRylSrMVJDsxni+WPG4m2plw2ccN
|
20
|
+
tSZUZRs6xnl7OHpRU060AsnSiuQiUecqhq0ps0mdER7o05GxsCTXmM20Y2vuwx/p
|
21
|
+
Et3lmmGtD3ha1k4aw7WPKwKBgHTPuxdvHxqKdEYGjHD6Q/Rm2lzi4zYY1tG10Jae
|
22
|
+
/ZYfSgos+q132JLEL3/SiUqbTZ7h4kBhE+QfGdZxOe2rC51MhycA02UlxRGSy7vV
|
23
|
+
7WsCQcq2+FZJJLI7xtaaRkO4OtfRvsFYEIypAs9x00puH+jlE7vSWR1kOI7TkIvh
|
24
|
+
iIF3AoGBAIpU2LHl42OhgDvWDFVx0d0FF51TzKsP0h14YeBrQJdjIyx+XRWZ6VdK
|
25
|
+
ujvfORKWw+q1PE2eAzvPRz7Ec7O/A1uF2Htl3XSrY+XoD2zEQ3fg7Gp6jO1q1SO1
|
26
|
+
sHvuZuJBC/SBusKdXpKKDq2YcjtMD3uqcvDNtH1O0AAEbPen2vyb
|
27
27
|
-----END RSA PRIVATE KEY-----
|
@@ -1,18 +1,18 @@
|
|
1
1
|
-----BEGIN CERTIFICATE-----
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
2
|
+
MIIC9TCCAd2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAnMRUwEwYDVQQDDAxNeVRl
|
3
|
+
c3RSb290Q0ExDjAMBgNVBAcMBTkxMzQzMB4XDTE2MDIyOTEwNDQwN1oXDTI2MDIy
|
4
|
+
NjEwNDQwN1owJDERMA8GA1UEAxMIbWVyY3VyaW8xDzANBgNVBAoTBmNsaWVudDCC
|
5
|
+
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALLL/SazTQMtvwlBTQz8upZV
|
6
|
+
oT/JC13xJlAW5kQySty53spDH64ss8l3G7qbmjvUqtwhCqcgJ40Tb33UmYlYZaR5
|
7
|
+
zPNvQG284AwSzXAMhPKM41FNenTD1kmlOTtzk7iAbAbMZD4KfzQZ9E3a+kUyV9MV
|
8
|
+
VlYKxwRwjq2DmUWuDsw5Ei6gHYpuQwdlWPVCyIOmcg30qzvcVjK3bFguKkjy3NTb
|
9
|
+
pVsTqoF/7GHsoT85ZP4wsThgwmkMvyO181uMBcU4Y1btn4VusDB4//mc3uVW2fJo
|
10
|
+
IjJw72+oqQJKr1XMVE0bZbspWSafkcbi31rbeHURUrOqqFuJnRKgCfk3LC86T+cC
|
11
|
+
AwEAAaMvMC0wCQYDVR0TBAIwADALBgNVHQ8EBAMCB4AwEwYDVR0lBAwwCgYIKwYB
|
12
|
+
BQUHAwIwDQYJKoZIhvcNAQELBQADggEBAGj9EDYbrmp9+/p7lAtTxiZv5V21qiU5
|
13
|
+
8DreTTwybsdpPeGKVH7OowDydbxNiPH6gPZ0OGrMyJ9qA5zYP2ozZiYrxuoIb0xQ
|
14
|
+
5u/yQ8qCwh14dorQrtsYCXj9CqLP5Ns3siH8pg7EsHBf/lADGByn0TH45z7O9fJc
|
15
|
+
hLAppaaFiS/5I8F7MvzKuwryDayX41DVwVU63zbMZ+Xloa4AI1YWwfSZ0cGrNR7R
|
16
|
+
yyN1Bbzg1OK5TeEj7F/4uNuydxaPYHTtAeq1ycEppsCsjYts/J6xtG1mrjhZHhas
|
17
|
+
WuZ4fmj5dkEUG1PLnVscPbmTO6F9ZD2siARq3su+PBDpdbFMpcf09+A=
|
18
18
|
-----END CERTIFICATE-----
|
data/spec/tls/client_key.pem
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
-----BEGIN RSA PRIVATE KEY-----
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
2
|
+
MIIEogIBAAKCAQEAssv9JrNNAy2/CUFNDPy6llWhP8kLXfEmUBbmRDJK3LneykMf
|
3
|
+
riyzyXcbupuaO9Sq3CEKpyAnjRNvfdSZiVhlpHnM829AbbzgDBLNcAyE8ozjUU16
|
4
|
+
dMPWSaU5O3OTuIBsBsxkPgp/NBn0Tdr6RTJX0xVWVgrHBHCOrYOZRa4OzDkSLqAd
|
5
|
+
im5DB2VY9ULIg6ZyDfSrO9xWMrdsWC4qSPLc1NulWxOqgX/sYeyhPzlk/jCxOGDC
|
6
|
+
aQy/I7XzW4wFxThjVu2fhW6wMHj/+Zze5VbZ8mgiMnDvb6ipAkqvVcxUTRtluylZ
|
7
|
+
Jp+RxuLfWtt4dRFSs6qoW4mdEqAJ+TcsLzpP5wIDAQABAoIBAFWGmFiLyhnsJwaR
|
8
|
+
Uv8UYViKK3DshWBxewcyfQFAIWlGC9kqlJvnTDThocT4q6VVDEnyEDtzeRfVpS5G
|
9
|
+
pQ761tv/W1dS7znO8Ek2MUkY4/t2A0Kf0iTKjNV7kE3s8kt+Oq5h1M2Mjd5pT+By
|
10
|
+
D+dLtpEFEuBjlWF9SfKcEZQwN2neUi3cCaz6xsp/P33EzKI9hNvPexxODlPNivYr
|
11
|
+
wmwopJwP2s0VTpqJUu0K3PV6WSH/JpCC8P2Ur2equpGQQjp12EGDuCpVeFTnVx4j
|
12
|
+
t48DI7IE1bJyLBHM1k59UkDbDVkEsgY7Pl569X+xg/QCdE073eYUptADLLZ1DnvF
|
13
|
+
bkGaNaECgYEA2Q+cPxtMQ3L2CUUxXK3yfAfUyMSFpBY6+ZB/nGuolp+2lkEr3S/j
|
14
|
+
MTyEKm2IR0wVURvkabV2RgqNMKa3BQk1iXAkn2BEPG4D5FkWf5MLLBeBMP2nce4C
|
15
|
+
ZapG8cgEepnWRURtoYofOcN2INvqxnruIzfMlFsudXBkA9ANMCoTerECgYEA0t8f
|
16
|
+
HWlB9mQEe2i581XFaUcqPWwZx4g9QKqz2WCVqnUZHPF7dNT3C265rSEWsIMCs3MK
|
17
|
+
5gUxzyyxBt/1cteQJNS65GFBVAf4YNbY6wWLbSMgkJL31kXChFoI4QjClOI7q4qw
|
18
|
+
aRBHLlpFfg+RNMS0gCx/EwIDjxoCTFVxA2K9ahcCgYAJ6o6my2Z2hl/7GHAi3ceA
|
19
|
+
JxNvgJriXimfkRxjVv/CsdUzlBKe7jsg2rTnA04Ag9dNd0q+EY4vsPe2S0d9MWiC
|
20
|
+
uN7TcSBs6lG/Mtq2RU9zWjeKt2vY5pixcFABZ7Pcrf5995xSju7SQr24zpMxMhiC
|
21
|
+
/1+XP3sl3laTXgPcOW/eYQKBgEmRLfnEzw52tlmXn8gVFFo2SbZEEHpcPYJiC3y7
|
22
|
+
BXwCflBqrveDlOyYJI8SDChojHiumg7FoSr2HIyZdbgrHE69KLakd3Ypka23RtY3
|
23
|
+
iPz6VFIb8/r9O2+ROafItpnak5a1O/Zrh2nUdIoWREJ0ncRZwbuP6E30dPjMljDo
|
24
|
+
MczhAoGAbQ7XDKCpw2wo5AHM6brO4xS1RObPXugDM5VEGHJ6HaS9f1lFfv8vbSXr
|
25
|
+
TsDTMYOoVA7oTz9kQD3exj9IjTX0f40ogmaB3b3PIPg9muNHcuNGwB75hNiRcZEj
|
26
|
+
dXfbMKVvo08Eej8k8TZsVfAKRxdLm+ahaPWThSoEGxElI1mD12c=
|
27
27
|
-----END RSA PRIVATE KEY-----
|
@@ -1,18 +1,18 @@
|
|
1
1
|
-----BEGIN CERTIFICATE-----
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
2
|
+
MIIC9TCCAd2gAwIBAgIBAjANBgkqhkiG9w0BAQsFADAnMRUwEwYDVQQDDAxNeVRl
|
3
|
+
c3RSb290Q0ExDjAMBgNVBAcMBTkxMzQzMB4XDTE2MDIyOTEwNDQwN1oXDTI2MDIy
|
4
|
+
NjEwNDQwN1owJDERMA8GA1UEAxMIbWVyY3VyaW8xDzANBgNVBAoTBnNlcnZlcjCC
|
5
|
+
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKS+/ObmcHcIOpMURhCd87Lw
|
6
|
+
PAkubfgy92spABOHMPKprfuxvggLRhyUEVtl+zDz6lor5GmjZWWHNyVvrrPRwaz1
|
7
|
+
K/G4qQnjnDR+TRy3EyC29YhJEZlHsszDm7SrabrV0rQVMZKX6rMmiFvkOSVvoECm
|
8
|
+
gagg8f55itpXEdHb3HbHyGrMG3lOmJRbxu7ss9AltfSZgaEpAN/zqRqj6ym1FDbT
|
9
|
+
jkPu8HeOuQ+GrRdlUmJDKbM5JJ6NhI3WhnjrgO1P52ksFgcRUmgk+7iviRj/wDu/
|
10
|
+
73c9ZBoMREoF+/BYd9VTjjGftH9qiNK81PuRAgux/YGd8mUzCh51ZAvE912YHc8C
|
11
|
+
AwEAAaMvMC0wCQYDVR0TBAIwADALBgNVHQ8EBAMCBSAwEwYDVR0lBAwwCgYIKwYB
|
12
|
+
BQUHAwEwDQYJKoZIhvcNAQELBQADggEBAALRwwleGksytFtvqRswrv5aA1BmbcUs
|
13
|
+
qLAMEOBul/JN/KthdICw78GXu8oU/kkp4QjMKDo9pobNe5klFH0m1S1r9LuqC5o7
|
14
|
+
iyxuSHDN9Y8Sy+KzZaGpZBJIdBAZnE0r1nGwEyPEFtX29IAhh/0Uh4gIobUcCMbb
|
15
|
+
N+ABaNUp7FrPqFNbcOw2qR0KeoSGzoBKkCwUjx1XACixrNRvDM7T1G5JfHLXZWDu
|
16
|
+
819p71KjyR4xoIBZgkim6YcoEbgFZahBIFqpe7gmq314iiP+OgrZnOfdZ7zULvxw
|
17
|
+
6yZpSqucTzcvBFjBCTwkXzg6/pPKF5R6YGp3CXyW1TqGnZBnHfmF9Yk=
|
18
18
|
-----END CERTIFICATE-----
|
data/spec/tls/server_key.pem
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
-----BEGIN RSA PRIVATE KEY-----
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
2
|
+
MIIEpAIBAAKCAQEApL785uZwdwg6kxRGEJ3zsvA8CS5t+DL3aykAE4cw8qmt+7G+
|
3
|
+
CAtGHJQRW2X7MPPqWivkaaNlZYc3JW+us9HBrPUr8bipCeOcNH5NHLcTILb1iEkR
|
4
|
+
mUeyzMObtKtputXStBUxkpfqsyaIW+Q5JW+gQKaBqCDx/nmK2lcR0dvcdsfIaswb
|
5
|
+
eU6YlFvG7uyz0CW19JmBoSkA3/OpGqPrKbUUNtOOQ+7wd465D4atF2VSYkMpszkk
|
6
|
+
no2EjdaGeOuA7U/naSwWBxFSaCT7uK+JGP/AO7/vdz1kGgxESgX78Fh31VOOMZ+0
|
7
|
+
f2qI0rzU+5ECC7H9gZ3yZTMKHnVkC8T3XZgdzwIDAQABAoIBABqJGLsoSt0hWi3u
|
8
|
+
igqLJoGf6EuiStw7eVatV/HNSLkNU5TC4FTzW+umfdU26+rKnui/QR8yzlY4HU3O
|
9
|
+
W1ljY8q0AswAblnFa5eY8Fq7sj0Guy2kd001GzuYFjBXm8QYRMP01fNCvO72Oehz
|
10
|
+
LjE1dZ50M1YdWF0gvpjEhX5D55LKAOHyoYUy384YVkDu1HSrL3Ls1ZxMmHSRchrH
|
11
|
+
vGunovZlMCmq1fdPtC/5pA2o7rkk4ToZHrAL2ETm/1qyWOPzKr+lkk0m8M9/4eX+
|
12
|
+
z5MaoWZ2SvPOIasNbEvKJCJbZ5XNAyymoLDPMPC2OdrrmqPaE1F0XyqRaMvakXI2
|
13
|
+
Pd6p0wECgYEA2JEhxuTcUSQMUYulS8DwCSE/xn57+0VHIq6Yjrw79GD7w4OMq4Go
|
14
|
+
K7slij0K9wSBtCM+uO78fs84s5g6GzXtQzuqy2KaIbtspDpuygz0rPaBal7IS1Va
|
15
|
+
FQB4ZrvyQRLlZmRTlaRxQdqPZx1gnccypnZJUx3VMgzAPyYulzIChS8CgYEAwr5S
|
16
|
+
Qu3HntFpD05lcd6FaVrclGcDDF3OBkVkJC29D/lX+PROfSwWMcNoUF2s/0G6/9JG
|
17
|
+
EQ2yxeVv1iKE4aKHDOBgjZubnfEXwx/yCTXlhYR/9wb4T4xbegzElltPXss+TsIZ
|
18
|
+
EAbrp2VtS05LB9VoXp9F3LWmIRWab5KnizgbCWECgYEApOeGL7vu4z4uvx01hYRp
|
19
|
+
gpo1xMBlScTL0OXftrgwcvoyWwLdZ274DiyX/jZTFhrxZKh9xzX7P9gsldxxSmz6
|
20
|
+
uHpDqFDxioP7yuXPnLzWxqmBi+yWWX6pdFqCU8ADTHfGA/ybBNRNhVaWYW8mNZ4L
|
21
|
+
vGNPnCGYSF8bODqruWdUMfMCgYEAtJ6wzUKcksDHIFsl26b3NfAABeRE/4NBQq+5
|
22
|
+
YZTKdbZd0ZlF8vKg4ybJ6T/45Aai2gK82bRKyyExyPnbJSsI9vhklPJuMt8ZmvBW
|
23
|
+
HBTQ/DUYOpVMWPtlHJ4a9xlZVCJNd96uQB8rEecQp3fGP02/r4Mp2Lrhim3u/uyW
|
24
|
+
WJmA+gECgYBNncMDorlUeWVSuq/zud/d97UEAvNSkDtlg/TVQrtRYDlCM2J9lH3J
|
25
|
+
UpkcbZeDJpLs4sC+edJ5IJpGwczn4j1nu8LUzy8DhjKFz0pKTJCNc48KfO0ayWwh
|
26
|
+
HUm0G9JSiL+F7IgUE3nabTmtH9QJdhHOslqOwLO4VgvcZdJufj2JPg==
|
27
27
|
-----END RSA PRIVATE KEY-----
|
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.4.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: 2016-
|
15
|
+
date: 2016-06-11 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: amq-protocol
|
@@ -46,6 +46,7 @@ files:
|
|
46
46
|
- Gemfile
|
47
47
|
- LICENSE
|
48
48
|
- README.md
|
49
|
+
- Rakefile
|
49
50
|
- benchmarks/basic_publish/with_128K_messages.rb
|
50
51
|
- benchmarks/basic_publish/with_1k_messages.rb
|
51
52
|
- benchmarks/basic_publish/with_4K_messages.rb
|
@@ -58,7 +59,10 @@ files:
|
|
58
59
|
- benchmarks/synchronized_sorted_set.rb
|
59
60
|
- benchmarks/write_vs_write_nonblock.rb
|
60
61
|
- bin/ci/before_build
|
62
|
+
- bin/ci/start_rabbitmq
|
61
63
|
- bunny.gemspec
|
64
|
+
- docker/Dockerfile
|
65
|
+
- docker/docker-entrypoint.sh
|
62
66
|
- examples/connection/authentication_failure.rb
|
63
67
|
- examples/connection/automatic_recovery_with_basic_get.rb
|
64
68
|
- examples/connection/automatic_recovery_with_client_named_queues.rb
|
@@ -193,13 +197,11 @@ files:
|
|
193
197
|
- spec/stress/concurrent_publishers_stress_spec.rb
|
194
198
|
- spec/stress/connection_open_close_spec.rb
|
195
199
|
- spec/stress/long_running_consumer_spec.rb
|
200
|
+
- spec/stress/wait_for_confirms_with_connection_loss_stress_spec.rb
|
196
201
|
- spec/tls/ca_certificate.pem
|
197
202
|
- spec/tls/ca_key.pem
|
198
|
-
- spec/tls/cacert.pem
|
199
|
-
- spec/tls/client_cert.pem
|
200
203
|
- spec/tls/client_certificate.pem
|
201
204
|
- spec/tls/client_key.pem
|
202
|
-
- spec/tls/server_cert.pem
|
203
205
|
- spec/tls/server_certificate.pem
|
204
206
|
- spec/tls/server_key.pem
|
205
207
|
- spec/unit/bunny_spec.rb
|
@@ -228,7 +230,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
228
230
|
version: '0'
|
229
231
|
requirements: []
|
230
232
|
rubyforge_project:
|
231
|
-
rubygems_version: 2.
|
233
|
+
rubygems_version: 2.4.8
|
232
234
|
signing_key:
|
233
235
|
specification_version: 4
|
234
236
|
summary: Popular easy to use Ruby client for RabbitMQ
|
@@ -295,13 +297,11 @@ test_files:
|
|
295
297
|
- spec/stress/concurrent_publishers_stress_spec.rb
|
296
298
|
- spec/stress/connection_open_close_spec.rb
|
297
299
|
- spec/stress/long_running_consumer_spec.rb
|
300
|
+
- spec/stress/wait_for_confirms_with_connection_loss_stress_spec.rb
|
298
301
|
- spec/tls/ca_certificate.pem
|
299
302
|
- spec/tls/ca_key.pem
|
300
|
-
- spec/tls/cacert.pem
|
301
|
-
- spec/tls/client_cert.pem
|
302
303
|
- spec/tls/client_certificate.pem
|
303
304
|
- spec/tls/client_key.pem
|
304
|
-
- spec/tls/server_cert.pem
|
305
305
|
- spec/tls/server_certificate.pem
|
306
306
|
- spec/tls/server_key.pem
|
307
307
|
- spec/unit/bunny_spec.rb
|
data/spec/tls/cacert.pem
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
-----BEGIN CERTIFICATE-----
|
2
|
-
MIIC5DCCAcygAwIBAgIJAMa8aNd9TfEZMA0GCSqGSIb3DQEBBQUAMCIxETAPBgNV
|
3
|
-
BAMTCE15VGVzdENBMQ0wCwYDVQQHEwQxODE1MB4XDTEzMDYwMjE1NTQwMFoXDTE0
|
4
|
-
MDYwMjE1NTQwMFowIjERMA8GA1UEAxMITXlUZXN0Q0ExDTALBgNVBAcTBDE4MTUw
|
5
|
-
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDSLh8ZM0+1wVrr4J9KZLLt
|
6
|
-
VtGoKEhuTWYa+DvDbdUYaD/G06GfRqsM0eOKuJfoaMz3qY49j/bZXmuG64rGx5oq
|
7
|
-
Lp6VBwAw1R3Pmw3rD7XgiK0/7mVmnC4nwQAs9/uCKeAMPHfMDAG33aalxb3FzJfa
|
8
|
-
RUiSIY7y7Kt7nCVC53foTFxbt0EKm7wjey1S8P9XkCB8x+ZT5GetzoqulKxt/f1u
|
9
|
-
0K/gVnMUvFmflR4hsx5qBNV6wFEYwMfi+C6q184aJv7jmjumimf9IBOcOkZrDnQD
|
10
|
-
+7HeOeZAbMgLtCaacD2SH72s3hIHvgetbIJva+zJkbjjjA+Ycd824WjG+CiOEIch
|
11
|
-
AgMBAAGjHTAbMAwGA1UdEwQFMAMBAf8wCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEB
|
12
|
-
BQUAA4IBAQAvLziFQ56+vNyNAGDD8bQaUY8JElXj4X3vC0nFeN0zuPQz9Aa8UH4A
|
13
|
-
Y7e/j3NS2mfYdqC8U3iYEXZwp4qk4/JZ9SkhRiaLbeIF7VT+xg+K/HDmBmwNZpQL
|
14
|
-
b9bNBk9BeRMv4jJUuM/BE04nmqQnbD8h2QleT0A7uVe94ym86rHcimCYmZT7wEZ0
|
15
|
-
D3TZPRnETwe2WtpAU3qB6Zd2ug/GulFdeugHe8bM0Kjz+BiK+Tmsa0SIN31t/uu4
|
16
|
-
Tcxk1uFldIGPURAgs6MXxBHohOdJySBLrjsJWlD02Oxv9LeCfxej/gA6pZ4Wiyh/
|
17
|
-
VtkyWoFlx/8n2S7IH1bKqMFy0SU/Fp3F
|
18
|
-
-----END CERTIFICATE-----
|
data/spec/tls/client_cert.pem
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
-----BEGIN CERTIFICATE-----
|
2
|
-
MIIC+zCCAeOgAwIBAgIBATANBgkqhkiG9w0BAQUFADAnMRUwEwYDVQQDEwxNeVRl
|
3
|
-
c3RSb290Q0ExDjAMBgNVBAcTBTgwNTQ3MB4XDTE0MDkxMjA4NDg0MVoXDTI0MDkw
|
4
|
-
OTA4NDg0MVowKjEXMBUGA1UEAxMObWVyY3VyaW8ubG9jYWwxDzANBgNVBAoTBmNs
|
5
|
-
aWVudDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJd+NA0M21Kj1CyH
|
6
|
-
WmnLzUAQAi3GawvLnxwyrlW3nfl1BLEL2kLHrHYS7S0giL0T/Zziw9BqNB2Fba3l
|
7
|
-
RbI8d0JppuMXRRHnFTY/fLYpQlcwB8hT17NBk8euoU1r2VopCwDKP8rxAxLLL9Im
|
8
|
-
2Cg+ksvZe+6yJPzAQ5aw1zc+UMSwJ8p2gAI7BI8Oekk506iccwbHwqVHH3DwCCXp
|
9
|
-
0dRtzMeRqZY9lC1wsLHVYLl/Pc/xWtqjuk0j5px6RtrBoW16MaK43zH1nFlEA8KH
|
10
|
-
c0RVFaQsQMVYBbxsVq54rymGInmmSk+vy5ZoFC1ItBRPSSgI1beaL5/4B/dJGI74
|
11
|
-
7u/+cpsCAwEAAaMvMC0wCQYDVR0TBAIwADALBgNVHQ8EBAMCB4AwEwYDVR0lBAww
|
12
|
-
CgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBALPEuvS/1/0IBM/Kyi0MHa6m
|
13
|
-
KjltIm2Cp8iaTkziy9r2UDckvSqv8GW0itE69126j4L1iVUYNIVemUvcAwaX3YLf
|
14
|
-
nN80XMjNl8mpSKwCXvKKXUTAFUQN+SPMbEC7Uzip1WgJGyc2T9ka8iN+nd1T7btU
|
15
|
-
482+zf5bGh+d0E7c4j0jfpf/1+VkfG/Vn5/EpG51DCvYtgg3F3PR39mDmnvKJu8p
|
16
|
-
eYYvk3Jab0r/v3cLdt5GgZ4/WXZCdVpGgfDd60miXh7DUWilXBRuntVxZequF/ZI
|
17
|
-
obei8teP2T/4oos3GWPOLxEA8EnQsdUoXxK/2DTq+9G6PQTQNm2/kvR6hPKimBk=
|
18
|
-
-----END CERTIFICATE-----
|
data/spec/tls/server_cert.pem
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
-----BEGIN CERTIFICATE-----
|
2
|
-
MIIC+zCCAeOgAwIBAgIBAjANBgkqhkiG9w0BAQUFADAnMRUwEwYDVQQDEwxNeVRl
|
3
|
-
c3RSb290Q0ExDjAMBgNVBAcTBTgwNTQ3MB4XDTE0MDkxMjA4NDg0MloXDTI0MDkw
|
4
|
-
OTA4NDg0MlowKjEXMBUGA1UEAxMObWVyY3VyaW8ubG9jYWwxDzANBgNVBAoTBnNl
|
5
|
-
cnZlcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALvQX6P7Tz0sNKNg
|
6
|
-
yiEb71gg84gyOaaTnIbgPKHTJ9kFMLZFQ3HN05dHLwqH1noefauV6HVPESVVf01m
|
7
|
-
Ph28jre9tBorPAaiIzuf2kKlpZolN7Q9d/5rb2Vw3dUpoZJoD4aL+u8cghmkzodV
|
8
|
-
vts1WRIRjH/yTUc266+h6m9lIi9L9BCYMTAWOF0KHoXA2VgLLkQNv+2GKHFP32ZH
|
9
|
-
1vXa98fxErpJ//3jRwP5m4t0PDSPlAw++bOiwgZb8r+vEOCyZE15BoukSi8rtibc
|
10
|
-
tSpYsbyvWaoe/JQfGPI3St84DhrUPPm2FUMyWMeTmldcfyLA25/vQPha4JC4f4Bc
|
11
|
-
CYvzCVUCAwEAAaMvMC0wCQYDVR0TBAIwADALBgNVHQ8EBAMCBSAwEwYDVR0lBAww
|
12
|
-
CgYIKwYBBQUHAwEwDQYJKoZIhvcNAQEFBQADggEBADWhd3ikOdCFNZfDy9If9txm
|
13
|
-
WtiBJ8g3oWjj99zIvb0CNqp0Xv5jvWgw8DYXG5FZAA7g5sKrihkxKTtpYnKsTZ40
|
14
|
-
HEcGRUqF/Z1LLeh7/OYMx597yBn86ZcqUyBIaIsEhHNa+yC1zHWa4rg1vpDwY/iI
|
15
|
-
Mbewjy9KyB4n6w+3TpSHvhpEa5OJiDOMFePURsS3io9r7MGfFVTM0Cho1qIYT1vt
|
16
|
-
tOoUXpKAJxu+6TwDXzMwoSmjMw5GtchqhpCHQcHBH9z1rGHh/VShGl/+rif4JZ98
|
17
|
-
natbZ91esBaJKbWLUxH1U9Aol8wwYD4MzK3rvfImgjgig+htAqhCMxLu1z9VE+o=
|
18
|
-
-----END CERTIFICATE-----
|