amqp 0.8.0.rc1 → 0.8.0.rc2
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.
- data/CHANGELOG +15 -3
- data/README.textile +4 -5
- data/amqp.gemspec +1 -1
- data/docs/RabbitMQVersions.textile +21 -0
- data/examples/extensions/rabbitmq/per_queue_message_ttl.rb +57 -0
- data/examples/tls_certificates/client/cert.pem +18 -0
- data/examples/tls_certificates/client/key.pem +27 -0
- data/examples/tls_certificates/client/keycert.p12 +0 -0
- data/examples/tls_certificates/client/req.pem +15 -0
- data/examples/tls_certificates/server/cert.pem +18 -0
- data/examples/tls_certificates/server/key.pem +27 -0
- data/examples/tls_certificates/server/keycert.p12 +0 -0
- data/examples/tls_certificates/server/req.pem +15 -0
- data/examples/tls_certificates/testca/cacert.cer +0 -0
- data/examples/tls_certificates/testca/cacert.pem +17 -0
- data/examples/tls_certificates/testca/certs/01.pem +18 -0
- data/examples/tls_certificates/testca/certs/02.pem +18 -0
- data/examples/tls_certificates/testca/index.txt +2 -0
- data/examples/tls_certificates/testca/index.txt.attr +1 -0
- data/examples/tls_certificates/testca/index.txt.attr.old +1 -0
- data/examples/tls_certificates/testca/index.txt.old +1 -0
- data/examples/tls_certificates/testca/openssl.cnf +53 -0
- data/examples/tls_certificates/testca/private/cakey.pem +27 -0
- data/examples/tls_certificates/testca/serial +1 -0
- data/examples/tls_certificates/testca/serial.old +1 -0
- data/lib/amqp/channel.rb +9 -4
- data/lib/amqp/exchange.rb +4 -1
- data/lib/amqp/queue.rb +8 -2
- data/lib/amqp/version.rb +1 -1
- data/spec/integration/automatic_binding_for_default_direct_exchange_spec.rb +11 -3
- data/spec/integration/basic_get_spec.rb +7 -3
- data/spec/integration/queue_declaration_spec.rb +45 -8
- metadata +56 -61
data/CHANGELOG
CHANGED
@@ -1,14 +1,26 @@
|
|
1
1
|
= Version 0.8.0
|
2
2
|
|
3
|
+
* [API] AMQP::Exchange#initialize now accepts :arguments option that takes a hash. Brokers
|
4
|
+
may implement AMQP extensions using (usually x-prefixed) declaration arguments.
|
5
|
+
* [API] AMQP::Queue#initialize now accepts :arguments option that takes a hash. RabbitMQ
|
6
|
+
recognizes x-message-ttl argument and uses it as message TTL in milliseconds for
|
7
|
+
queue that is being declared.
|
8
|
+
* [API] AMQP#Logger is deprecated. It will be removed before 1.0 release.
|
9
|
+
* [API] AMQP#fork is deprecated. It will be removed before 1.0 release.
|
10
|
+
* [API] AMQP::RPC is deprecated. It will be removed before 1.0 release.
|
11
|
+
* [FEATURE] Significant improvements to the documentation
|
12
|
+
* [FEATURE] Support for RabbitMQ extensions to AMQP 0.9.1
|
13
|
+
* [API] AMQP::Exchange#publish now accepts (an optional) block that is called as soon as message
|
14
|
+
is considered published (EventMachine loop has pushed payload down the network stack).
|
3
15
|
* [API] AMQP::Channel.new now accepts (an optional) block and yields newly opened channel to it as soon as
|
4
16
|
channel.open-ok arrives from the broker.
|
5
17
|
* [API] AMQP::Header#ack now can acknowledge multiple deliveries
|
6
18
|
* [API] AMQP::Exchange#delete now takes (an optional) block that is called when exchange.delete-ok response arrives.
|
7
19
|
* [API] AMQP::Header now implements #to_hash
|
8
|
-
* [API] AMQP::Queue#pop block now can take 1, 2 or
|
20
|
+
* [API] AMQP::Queue#pop block now can take 1, 2 or 3 arguments.
|
9
21
|
1 argument means handler is only interested in content payload
|
10
|
-
2 arguments
|
11
|
-
|
22
|
+
2 arguments mean handler is interested in headers and the content
|
23
|
+
3 arguments mean handler is interested in headers, content and AMQP method instance
|
12
24
|
* [API] AMQP::Queue#purge now takes an optional block which is called when queue.purge-ok response arrives.
|
13
25
|
* [API] AMQP::Queue#delete now takes an optional block which is called when queue.delete-ok response arrives.
|
14
26
|
* [API] AMQP::Queue#delete now accepts :nowait option.
|
data/README.textile
CHANGED
@@ -52,9 +52,7 @@ h3. Install RabbitMQ
|
|
52
52
|
|
53
53
|
Please refer to "RabbitMQ installation guide":http://www.rabbitmq.com/install.html
|
54
54
|
Note that for Ubuntu and Debian we strongly advice that you use "RabbitMQ apt repository":http://www.rabbitmq.com/debian.html#apt
|
55
|
-
that has recent versions of RabbitMQ.
|
56
|
-
that only supports AMQP protocol 0.8. amqp gem 0.8.0 and later *will not work with RabbitMQ versions
|
57
|
-
before 2.0*.
|
55
|
+
that has recent versions of RabbitMQ. Learn more in {file:docs/RabbitMQVersions.textile RabbitMQ versions} section.
|
58
56
|
|
59
57
|
|
60
58
|
h3. Install the gem
|
@@ -146,7 +144,7 @@ gem "amqp", :git => "git://github.com/ruby-amqp/amqp.git", :branch => "master"
|
|
146
144
|
h2. Examples
|
147
145
|
|
148
146
|
You can find many examples (both real-world cases and simple demonstrations)
|
149
|
-
|
147
|
+
under "examples directory":https://github.com/ruby-amqp/amqp/tree/master/examples in the repository.
|
150
148
|
|
151
149
|
|
152
150
|
|
@@ -183,7 +181,8 @@ h2. Community
|
|
183
181
|
|
184
182
|
h2. License
|
185
183
|
|
186
|
-
AMQP gem is licensed under the "Ruby License:
|
184
|
+
AMQP gem is licensed under the "Ruby License":http://www.ruby-lang.org/en/LICENSE.txt.
|
185
|
+
|
187
186
|
|
188
187
|
|
189
188
|
h2. Credits and copyright information
|
data/amqp.gemspec
CHANGED
@@ -0,0 +1,21 @@
|
|
1
|
+
h1. amqp gem and RabbitMQ versions compatibility
|
2
|
+
|
3
|
+
h2. Using recent versions on Debian and Ubuntu
|
4
|
+
|
5
|
+
Ubuntu (even 10.10) and Debian both "ship with old RabbitMQ version":http://packages.ubuntu.com/maverick/rabbitmq-server,
|
6
|
+
that only supports AMQP protocol 0.8. amqp gem 0.8.0 and later *will not work with RabbitMQ versions
|
7
|
+
before 1.8.0*.
|
8
|
+
|
9
|
+
We strongly recommend that you use "RabbitMQ apt repository":http://www.rabbitmq.com/debian.html#apt that has recent versions of RabbitMQ.
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
h2. TLS (SSL) support
|
14
|
+
|
15
|
+
Note that "before 1.7.0, RabbitMQ did not support TLS":http://www.rabbitmq.com/ssl.html. In order to have TLS
|
16
|
+
support, RabbitMQ 1.7.0 requires
|
17
|
+
|
18
|
+
* Erlang/OTP R13B or later
|
19
|
+
* Erlang SSL 3.10 or later
|
20
|
+
|
21
|
+
and recommends using Erlang R141B that ships with Erlang SSL 4.0.1.
|
@@ -0,0 +1,57 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
require "bundler"
|
5
|
+
Bundler.setup
|
6
|
+
|
7
|
+
$:.unshift(File.expand_path("../../../../lib", __FILE__))
|
8
|
+
require 'amqp'
|
9
|
+
require "amqp/extensions/rabbitmq"
|
10
|
+
|
11
|
+
AMQP.start do |connection|
|
12
|
+
puts "Connected!"
|
13
|
+
AMQP::Channel.new(connection) do |channel, open_ok|
|
14
|
+
puts "Channel #{channel.id} is now open"
|
15
|
+
|
16
|
+
channel.on_error do
|
17
|
+
puts "Oops, there is a channel-levle exceptions!"
|
18
|
+
end
|
19
|
+
|
20
|
+
x = channel.fanout("amq.fanout")
|
21
|
+
channel.queue("", :auto_delete => true, :arguments => { "x-message-ttl" => 1000 }) do |q|
|
22
|
+
puts "Declared a new server-named qeueue: #{q.name}"
|
23
|
+
q.bind(x)
|
24
|
+
|
25
|
+
|
26
|
+
EventMachine.add_timer(0.3) do
|
27
|
+
10.times do |i|
|
28
|
+
puts "Publishing message ##{i}"
|
29
|
+
x.publish("Message ##{i}")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
EventMachine.add_timer(0.7) do
|
34
|
+
q.pop do |headers, payload|
|
35
|
+
raise "x-message-ttl didn't seem to work (timeout is up)" if payload.nil?
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
EventMachine.add_timer(1.5) do
|
40
|
+
q.pop do |headers, payload|
|
41
|
+
raise "x-message-ttl didn't seem to work (timeout isn't up)" if payload
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
show_stopper = Proc.new {
|
48
|
+
AMQP.stop do
|
49
|
+
EM.stop
|
50
|
+
end
|
51
|
+
}
|
52
|
+
|
53
|
+
|
54
|
+
EM.add_timer(3, show_stopper)
|
55
|
+
Signal.trap('INT', show_stopper)
|
56
|
+
Signal.trap('TERM', show_stopper)
|
57
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIC5DCCAcygAwIBAgIBAjANBgkqhkiG9w0BAQUFADATMREwDwYDVQQDEwhNeVRl
|
3
|
+
c3RDQTAeFw0xMTA0MTcyMDE4MzNaFw0xMjA0MTYyMDE4MzNaMCcxFDASBgNVBAMT
|
4
|
+
C2dpb3ZlLmxvY2FsMQ8wDQYDVQQKEwZjbGllbnQwggEiMA0GCSqGSIb3DQEBAQUA
|
5
|
+
A4IBDwAwggEKAoIBAQC/4CSqBjpmNXoDt5xU0D4ONG3bQXBV4bJid/nmzIvV67pb
|
6
|
+
v/VpqKxM+UqoV9d09u/H+f/jAKu0of1e1d+1o09JtjJshX4sYREh2/n0umENH1xC
|
7
|
+
yvWnP0eFTithj9qmVcK5UOvoZKSKYT4gtCIpYhRUQZkEhPYKhvxePztjRIeUghkK
|
8
|
+
Qc9Qi0/eARm8d3Zdo0ORnnNNIP+G7BjecmJvTLCP/PBDIGG6r1eybNeulNWddgLg
|
9
|
+
cUq0ACFepxCJW6RdGVrMXhWomScvKssIUMAdDfwM9ffq64MYE2ZLG1OBBPefNI47
|
10
|
+
wz8h9ak15T2ZpKFU9biXLr/SnGhdhNR31d16pAtLAgMBAAGjLzAtMAkGA1UdEwQC
|
11
|
+
MAAwCwYDVR0PBAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMCMA0GCSqGSIb3DQEB
|
12
|
+
BQUAA4IBAQCVBpz3gZRr1s48SVF4+C9YLzrSaWsvzKZNDKH7RJ4f1VR//ZY5zsYi
|
13
|
+
RqSlzSfLM76Y6Y/Eq0iFshtKmuXHKyA4r/Gp+iiCw4U9Htk91rg98wAPc8wOBgn1
|
14
|
+
OmomH65JpLwxYvUwyt91opGppcqZHWhruhI0fFTFtPIlGKK3KOmJLPpaSvY0YTJ+
|
15
|
+
vaI3D6yQEMQoZ/mcXk928ofJJvOpUEmvjTW4Orz+T8NmiffLb64P50h86bdV+8tw
|
16
|
+
FJx6ix6vLF41LU2iPEYHuuXkA7+M5e+POGscJJCb1p6JKxzI6D/UVDnrbhOlqBa5
|
17
|
+
U45f0oXQ/ndOYUrBRu3BPFdNAjvpa0ld
|
18
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,27 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIIEowIBAAKCAQEAv+AkqgY6ZjV6A7ecVNA+DjRt20FwVeGyYnf55syL1eu6W7/1
|
3
|
+
aaisTPlKqFfXdPbvx/n/4wCrtKH9XtXftaNPSbYybIV+LGERIdv59LphDR9cQsr1
|
4
|
+
pz9HhU4rYY/aplXCuVDr6GSkimE+ILQiKWIUVEGZBIT2Cob8Xj87Y0SHlIIZCkHP
|
5
|
+
UItP3gEZvHd2XaNDkZ5zTSD/huwY3nJib0ywj/zwQyBhuq9XsmzXrpTVnXYC4HFK
|
6
|
+
tAAhXqcQiVukXRlazF4VqJknLyrLCFDAHQ38DPX36uuDGBNmSxtTgQT3nzSOO8M/
|
7
|
+
IfWpNeU9maShVPW4ly6/0pxoXYTUd9XdeqQLSwIDAQABAoIBAQC1hScqcpns98pm
|
8
|
+
md2bnyYV6iPDuTS9Crfnz/jrD7d6uXekNQXG33uhlnW6rN94F+TgGvKpnojSai14
|
9
|
+
+nyZKdZotaUeZWvoMCw1DBZ8H5aRA4oU5k1f282dn0YLFjyT/64oAxYq1IuVHknY
|
10
|
+
RpHK9K6mxygrzl21t94oi0lzr/FT29t8mSlcCQiHxAZWyGE55HvqSS4625P5pvh1
|
11
|
+
Bh4bZGT285XvlA1qbKbEn8M1IsCZmhPU87U+k6lCvEpBG32cdg9Ykt+BA33OCJj0
|
12
|
+
OrC6vKjLsIKEfbq8xoTjm7+fofv78B2/zobK7dFMVTAdnju8Tpwu/IDcHnLuKtt2
|
13
|
+
Vd8GOwGBAoGBAPBO/EeHSvlT46F3jT8ygIhB2rGQ8LBZwQmiejOdfhJ5EPs8KC7U
|
14
|
+
i9Wfo2Mktn7gr+X9nsY5ZHZoTFaFV1YSoIrsaWFd0RmuQKBcka+A9WPWEgRL0KrG
|
15
|
+
Km9pHjlYK6WAu+XzKnGlHzasxxLW48mvuMQApE5U5nVbZWonGBA2psRNAoGBAMxn
|
16
|
+
jHWH51SN5R/ldPvmNPEG8McR1XmzTM9M40snrj6UV8mLMH+KRHgoj664nhm1dnMa
|
17
|
+
rolKzoFQtS5unwjCGX+Lx9AnwUDDak2Q6LsqedO0PhIwUEtcaLnt8Zf3KWi4v4Es
|
18
|
+
eAHnYXZ1I7sqjCZ7pAwNBlCfE4Ai1XMH7syv5bn3AoGAYhbrlUrdSJ58eQkyp4w2
|
19
|
+
uOegnABcrq9EQ2mF1hHAR0wRqWtpv4vUtFMgPzTaJToTsp5us9zza/2ww1RUTPb3
|
20
|
+
fx12+l5wHrpo+MwwT2IlSCY2XniP6VVQNv/CbYfW8Qx2Jiu2tILBFfE6pS7/9fB7
|
21
|
+
S84zQyIWm+q9n7HreZrFQbUCgYB4BnnY7eOtp+CaGS/XVrdRrOSn0FYNL3bz5080
|
22
|
+
a2mKv6rI4x2oVrWb5R1x2GCl8gNK1akVX0LhdlXdnQFvsCIu3hKHrUByWg1K3MN8
|
23
|
+
XBXLdXRZU9tiVTH9s7YAqRa8sndpT4Zsf8SgPWqs1fAUDNgoZ2GE59QYktvJvye/
|
24
|
+
M65uwwKBgDnuu0PZ6tn7dKZWYhfBeQT21DsaQglvY3kQ4RHHlHiQnyALKnZqbLu9
|
25
|
+
wlAZIvRIltWeeQ+oT/Bxq9cD7GrdX8VmZ2xo/gYkJQoduT3AtyLrau8aZFWpiREH
|
26
|
+
2pDcznE7+DWcKKwr/Z2eQEOoE2KikeuAbMd2SG4vVTLG9w+N2e5I
|
27
|
+
-----END RSA PRIVATE KEY-----
|
Binary file
|
@@ -0,0 +1,15 @@
|
|
1
|
+
-----BEGIN CERTIFICATE REQUEST-----
|
2
|
+
MIICbDCCAVQCAQAwJzEUMBIGA1UEAxMLZ2lvdmUubG9jYWwxDzANBgNVBAoTBmNs
|
3
|
+
aWVudDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL/gJKoGOmY1egO3
|
4
|
+
nFTQPg40bdtBcFXhsmJ3+ebMi9Xrulu/9WmorEz5SqhX13T278f5/+MAq7Sh/V7V
|
5
|
+
37WjT0m2MmyFfixhESHb+fS6YQ0fXELK9ac/R4VOK2GP2qZVwrlQ6+hkpIphPiC0
|
6
|
+
IiliFFRBmQSE9gqG/F4/O2NEh5SCGQpBz1CLT94BGbx3dl2jQ5Gec00g/4bsGN5y
|
7
|
+
Ym9MsI/88EMgYbqvV7Js166U1Z12AuBxSrQAIV6nEIlbpF0ZWsxeFaiZJy8qywhQ
|
8
|
+
wB0N/Az19+rrgxgTZksbU4EE9580jjvDPyH1qTXlPZmkoVT1uJcuv9KcaF2E1HfV
|
9
|
+
3XqkC0sCAwEAAaAAMA0GCSqGSIb3DQEBBQUAA4IBAQAOpwkzMe1xYgYz8GOp5xF7
|
10
|
+
xJtfeh5z9JTt8ogvjS34mri2vNUPQd35H3y6Dhh9ZjLqC03mMV/KOtRCf7oJXpgZ
|
11
|
+
S8C/NyJWNXB7/QNf9/EWEyOxoWYuvhTxqc0MhLPWrJRjgBKvvCGszBj2kWxDn7OO
|
12
|
+
//TRq4ao2wQWHIlaP5htsr+rD4IJZqZC8lgptv0u9O/O8vruPUg3k6dnuiKdUyTL
|
13
|
+
2CDsiKSc6vZKJKL0TguBHSQj/sybAw1lyxIlpxiDcTCbM5FsER6jFydLly+ov3+x
|
14
|
+
sqMOTieWU3qnaqOwK2ENqQfRMAk3FXEuDzvW4t7oxHB2gJfUJXfEVUWv7Kol25VT
|
15
|
+
-----END CERTIFICATE REQUEST-----
|
@@ -0,0 +1,18 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIC5DCCAcygAwIBAgIBATANBgkqhkiG9w0BAQUFADATMREwDwYDVQQDEwhNeVRl
|
3
|
+
c3RDQTAeFw0xMTA0MTcyMDE3MjdaFw0xMjA0MTYyMDE3MjdaMCcxFDASBgNVBAMT
|
4
|
+
C2dpb3ZlLmxvY2FsMQ8wDQYDVQQKEwZzZXJ2ZXIwggEiMA0GCSqGSIb3DQEBAQUA
|
5
|
+
A4IBDwAwggEKAoIBAQDdBEpnl+BRcIzZ4M6pB649cT/YUxebTekUq0HhFXATba44
|
6
|
+
XkSx81Nn5dMVnKgJgJVRhBxU0ZpBt4/wogKaaYI4/OAEgbUcH03OnEXHNLB586eJ
|
7
|
+
GdaFHkSQOfnUbBIzpQKlQjGLfjmn6mXkLW5lLP5OrN+npuEI4Wq/jgbIQQp9t7Kw
|
8
|
+
g+Pb9VdJGw0dmMlVfPP8FVCRpGB9lJc1Ayw8gKHg4mi/uyKKFdLV9IWf+DXlvRQ2
|
9
|
+
vljmQEhSq4bvxnCtm4p5B7AFHefTnldSgGRUZuyI5/4vFMypB3deV+lku95514uN
|
10
|
+
F0gg66eDAfoNjEmca09P+GBy8LfJsuiBeFV4irtjAgMBAAGjLzAtMAkGA1UdEwQC
|
11
|
+
MAAwCwYDVR0PBAQDAgUgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEB
|
12
|
+
BQUAA4IBAQCCmvsAQ1GaPfoKMqCWxyrQ2BNVPWm9J65thZKxZQF01gLox9cpv6+X
|
13
|
+
QERcD71HStxbzh2B8Hebbk9OplGuyrdgfvzUxcn88kObj6udipDx4YxTJvtff/9w
|
14
|
+
xeD5OWDVgef0GkB1Rjj3C3W/sfmTZBYfdKuWuwxMG/NxISkQP4aFHwJnPrzNx9ON
|
15
|
+
bHoKVNrQ2iKAiMysjnFeA/4QuhBQRf41h9SBWwJEW3Ts91TzbgcjCL46Dq29QB9A
|
16
|
+
4v8t6K/nibP6n53zHbVzdxIEJ2hFKm+vuqaHRW3048Xgww1xkdxrVbyGp9si92i1
|
17
|
+
KJ5SDIOR8bQ7OXvdvpiyy6p9fIG0Z6w0
|
18
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,27 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIIEpAIBAAKCAQEA3QRKZ5fgUXCM2eDOqQeuPXE/2FMXm03pFKtB4RVwE22uOF5E
|
3
|
+
sfNTZ+XTFZyoCYCVUYQcVNGaQbeP8KICmmmCOPzgBIG1HB9NzpxFxzSwefOniRnW
|
4
|
+
hR5EkDn51GwSM6UCpUIxi345p+pl5C1uZSz+Tqzfp6bhCOFqv44GyEEKfbeysIPj
|
5
|
+
2/VXSRsNHZjJVXzz/BVQkaRgfZSXNQMsPICh4OJov7siihXS1fSFn/g15b0UNr5Y
|
6
|
+
5kBIUquG78ZwrZuKeQewBR3n055XUoBkVGbsiOf+LxTMqQd3XlfpZLveedeLjRdI
|
7
|
+
IOungwH6DYxJnGtPT/hgcvC3ybLogXhVeIq7YwIDAQABAoIBAEu0+YussZET/Ztw
|
8
|
+
bznlQKEZVuZR6Ccxs+J5m1JvlnmBO4lheSR/lhVj2z9u7vx6SCupFk9TkQRrzWl/
|
9
|
+
BWdBNvMwY8gHajNc4bkhPKG1AbJ0bPIAoMPuj0vcICDMeBuqrVJQb0o6DaPgHdDg
|
10
|
+
Yw1TMTVf8CiseC8jj/5XtykHZoGTNTKzusvTjL8hTXFaWQfHQaN3WC1qwrFU2+x6
|
11
|
+
AJeoSz5F1Q/lykqVAdl2B1L39kiSCAkbVE1GI2qjftCff3ycufYV/fxXeyZwZx9B
|
12
|
+
NGWUJFyZte8EcrAUoo9B/gvALGDbJsSUsbri+HsRsdOQT3K/giafUipX2FB8Bnxm
|
13
|
+
nasEfskCgYEA74PrKYo13mTUWRJ2FQTBRHLsMR53PK83RpRRs8361/uCJrjpqfdD
|
14
|
+
2fUt8kH0rmm2vaWYsllucJoYdYSC9CQdECLzpOZS907PJHXCOsFsBjw74fvjZ+gY
|
15
|
+
9EXIENZSOSR1PQCWZm+5lL4xi/T+beWBfz0YksErj2GM7dyJeQjkIz8CgYEA7Dpx
|
16
|
+
ANgrgO9WTu51NIlKt3P7+t6q6MHQcWuzkWMBmVU4zxeyggux+ucMj+l3KLyw7fLT
|
17
|
+
jRz03eGpqjQT8Yl676uYONhTDC9VOBbLgjShuVOX7lleMLxVFJWqL1FphNghxysF
|
18
|
+
HVCq1WH0Qu4keirPEotBxkNZRaRYHwRYlVPKMt0CgYEApIHSAj0IlNBiPS995R/X
|
19
|
+
8sCQU4heU1LxP0vd9gZy1OfNU/VLoE7RzqEkxrDgcu7u8cEMaOsd/L8KL6UtIKyx
|
20
|
+
PYUUHV2I/I2nnp43Io35OSsj4ipU3eg/Q3+uU0oxPUg6MgT2SDNSnsQnWb6TBj5N
|
21
|
+
PGxlNV7yIU/aMQF5dqVRtJcCgYEArC4Mn6jwTJImPnHgS+Kl6wFG8JvLxss9uu3d
|
22
|
+
fGLFj5VmSsvi+Ja9qzstFNf+WlruOwF64KfycqdAmyZKQwsJ6BcSZJyIK6F0Y+V5
|
23
|
+
f/YMyp/7ZWcOGEetW8uat9KHLqS6OglJOQzK96zl9MLPI5yAQevujSwZrYEUGcd5
|
24
|
+
KZ5hCqECgYBExYSDJOuSMvKFw66jrLiBedLPuzh1iznwd6e4idpqIUkdhbEuXhHG
|
25
|
+
+35HeN5cGwjbjXtIjxJsAddTbjvSqaPukmBKLm1ABqF3r0irbNaPcK1xfG9a5L28
|
26
|
+
/enwipaSWjGovfDXWqmmCvWC8M7iGiqFChI87WlzbvaAapOW0D576Q==
|
27
|
+
-----END RSA PRIVATE KEY-----
|
Binary file
|
@@ -0,0 +1,15 @@
|
|
1
|
+
-----BEGIN CERTIFICATE REQUEST-----
|
2
|
+
MIICbDCCAVQCAQAwJzEUMBIGA1UEAxMLZ2lvdmUubG9jYWwxDzANBgNVBAoTBnNl
|
3
|
+
cnZlcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN0ESmeX4FFwjNng
|
4
|
+
zqkHrj1xP9hTF5tN6RSrQeEVcBNtrjheRLHzU2fl0xWcqAmAlVGEHFTRmkG3j/Ci
|
5
|
+
Apppgjj84ASBtRwfTc6cRcc0sHnzp4kZ1oUeRJA5+dRsEjOlAqVCMYt+OafqZeQt
|
6
|
+
bmUs/k6s36em4Qjhar+OBshBCn23srCD49v1V0kbDR2YyVV88/wVUJGkYH2UlzUD
|
7
|
+
LDyAoeDiaL+7IooV0tX0hZ/4NeW9FDa+WOZASFKrhu/GcK2binkHsAUd59OeV1KA
|
8
|
+
ZFRm7Ijn/i8UzKkHd15X6WS73nnXi40XSCDrp4MB+g2MSZxrT0/4YHLwt8my6IF4
|
9
|
+
VXiKu2MCAwEAAaAAMA0GCSqGSIb3DQEBBQUAA4IBAQC2aRbyq5pJ34M8jsaEjcks
|
10
|
+
iov5KP17jfnHnz517/rKxKYRaoxftXVvUbtDLKMQNMAA9K65jetg6/6zqi3QTJwd
|
11
|
+
52Pn6OYTpzyFov42KRh1OSiRRa5CNXzDlHhosuVnVEOo2rdQggWZTY1clAbjEJmU
|
12
|
+
N6bn6NSL4B/Vn8GAVxXhRGGoHj26LupdoI6GS2S3xuExw0xiS3usq6xYthpxHQ/L
|
13
|
+
pQI2Ijk+IJZPnJR2RZji/7P3nWHWQX+HrCagCu4oyY4o7inWPVJpxD+1LmagRhv5
|
14
|
+
RyMdQKoY+6x3/r+tWATTNOVqbGzfuKj6TQSkCYvOZOejlRBsMhyYlpldVMCRmaoh
|
15
|
+
-----END CERTIFICATE REQUEST-----
|
Binary file
|
@@ -0,0 +1,17 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIICxjCCAa6gAwIBAgIJAOF/re9e0JhgMA0GCSqGSIb3DQEBBQUAMBMxETAPBgNV
|
3
|
+
BAMTCE15VGVzdENBMB4XDTExMDQxNzIwMDcxN1oXDTEyMDQxNjIwMDcxN1owEzER
|
4
|
+
MA8GA1UEAxMITXlUZXN0Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
|
5
|
+
AQDK8ZdVo1llXXrS7ed5Luel1VRq0DmJG1TZ8bAgovK9fx6WsgzeJ17zYwAEheUz
|
6
|
+
B8PogkNqU3ZIa4T51VCtamoiG6bbKYpco4lutKM7aNGNJNcUfDhwyt/NYOxXM3xf
|
7
|
+
ahMWjrbH0e4qKJgEjnJLpoeEa+YquDG2NXzocZY5+upy0pX6Reh1EQbju69j9f5Q
|
8
|
+
Z6u4cvraScyN5IYuq3lKTmc2TxVyINVkpK9DlGJZUBAOBLSbFxGZDRoY0D3b1aeS
|
9
|
+
/XMfVvcrJi48Ns2ZvT+CAy0KVeKBeQ9+6kD/YAizcxDGLRvqOZXOHYaE2L51DabL
|
10
|
+
QTxk9NFPgIxrYtGS7RtQ7dUhAgMBAAGjHTAbMAwGA1UdEwQFMAMBAf8wCwYDVR0P
|
11
|
+
BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAzFtKwsrCBaIAf1/VCJZh4+gzs/UW+
|
12
|
+
UXeC17GRzazb0O0drm9aMOtwE48NGVTwBjqmnPzFg56FYyll3oVZHz/fgkQZ+6iu
|
13
|
+
qAbwlmY2H+L9RyC9Mv3B+Ew/o3MNCQQ3rgxbA7hb0k8mwDplxS5GBRROwZl/zHks
|
14
|
+
gb4yPR6G83+zrgn6JIybdEGUySc1XDx+p6fVXvQG/1fsmExN9/ZuC6ulgBF7e+R5
|
15
|
+
d7l1AluGL4kS7GMDRZnU9QcXkhnlUyPXIDr/Jd1HFKtwgrXtVl5YIWTaRdWOXGwX
|
16
|
+
Q8BpM3Vk/NQFoTHO4Na3y8JY6iJzYTIXWHjI6RJdUffsEPtBoysHFHYv
|
17
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,18 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIC5DCCAcygAwIBAgIBATANBgkqhkiG9w0BAQUFADATMREwDwYDVQQDEwhNeVRl
|
3
|
+
c3RDQTAeFw0xMTA0MTcyMDE3MjdaFw0xMjA0MTYyMDE3MjdaMCcxFDASBgNVBAMT
|
4
|
+
C2dpb3ZlLmxvY2FsMQ8wDQYDVQQKEwZzZXJ2ZXIwggEiMA0GCSqGSIb3DQEBAQUA
|
5
|
+
A4IBDwAwggEKAoIBAQDdBEpnl+BRcIzZ4M6pB649cT/YUxebTekUq0HhFXATba44
|
6
|
+
XkSx81Nn5dMVnKgJgJVRhBxU0ZpBt4/wogKaaYI4/OAEgbUcH03OnEXHNLB586eJ
|
7
|
+
GdaFHkSQOfnUbBIzpQKlQjGLfjmn6mXkLW5lLP5OrN+npuEI4Wq/jgbIQQp9t7Kw
|
8
|
+
g+Pb9VdJGw0dmMlVfPP8FVCRpGB9lJc1Ayw8gKHg4mi/uyKKFdLV9IWf+DXlvRQ2
|
9
|
+
vljmQEhSq4bvxnCtm4p5B7AFHefTnldSgGRUZuyI5/4vFMypB3deV+lku95514uN
|
10
|
+
F0gg66eDAfoNjEmca09P+GBy8LfJsuiBeFV4irtjAgMBAAGjLzAtMAkGA1UdEwQC
|
11
|
+
MAAwCwYDVR0PBAQDAgUgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEB
|
12
|
+
BQUAA4IBAQCCmvsAQ1GaPfoKMqCWxyrQ2BNVPWm9J65thZKxZQF01gLox9cpv6+X
|
13
|
+
QERcD71HStxbzh2B8Hebbk9OplGuyrdgfvzUxcn88kObj6udipDx4YxTJvtff/9w
|
14
|
+
xeD5OWDVgef0GkB1Rjj3C3W/sfmTZBYfdKuWuwxMG/NxISkQP4aFHwJnPrzNx9ON
|
15
|
+
bHoKVNrQ2iKAiMysjnFeA/4QuhBQRf41h9SBWwJEW3Ts91TzbgcjCL46Dq29QB9A
|
16
|
+
4v8t6K/nibP6n53zHbVzdxIEJ2hFKm+vuqaHRW3048Xgww1xkdxrVbyGp9si92i1
|
17
|
+
KJ5SDIOR8bQ7OXvdvpiyy6p9fIG0Z6w0
|
18
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,18 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIC5DCCAcygAwIBAgIBAjANBgkqhkiG9w0BAQUFADATMREwDwYDVQQDEwhNeVRl
|
3
|
+
c3RDQTAeFw0xMTA0MTcyMDE4MzNaFw0xMjA0MTYyMDE4MzNaMCcxFDASBgNVBAMT
|
4
|
+
C2dpb3ZlLmxvY2FsMQ8wDQYDVQQKEwZjbGllbnQwggEiMA0GCSqGSIb3DQEBAQUA
|
5
|
+
A4IBDwAwggEKAoIBAQC/4CSqBjpmNXoDt5xU0D4ONG3bQXBV4bJid/nmzIvV67pb
|
6
|
+
v/VpqKxM+UqoV9d09u/H+f/jAKu0of1e1d+1o09JtjJshX4sYREh2/n0umENH1xC
|
7
|
+
yvWnP0eFTithj9qmVcK5UOvoZKSKYT4gtCIpYhRUQZkEhPYKhvxePztjRIeUghkK
|
8
|
+
Qc9Qi0/eARm8d3Zdo0ORnnNNIP+G7BjecmJvTLCP/PBDIGG6r1eybNeulNWddgLg
|
9
|
+
cUq0ACFepxCJW6RdGVrMXhWomScvKssIUMAdDfwM9ffq64MYE2ZLG1OBBPefNI47
|
10
|
+
wz8h9ak15T2ZpKFU9biXLr/SnGhdhNR31d16pAtLAgMBAAGjLzAtMAkGA1UdEwQC
|
11
|
+
MAAwCwYDVR0PBAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMCMA0GCSqGSIb3DQEB
|
12
|
+
BQUAA4IBAQCVBpz3gZRr1s48SVF4+C9YLzrSaWsvzKZNDKH7RJ4f1VR//ZY5zsYi
|
13
|
+
RqSlzSfLM76Y6Y/Eq0iFshtKmuXHKyA4r/Gp+iiCw4U9Htk91rg98wAPc8wOBgn1
|
14
|
+
OmomH65JpLwxYvUwyt91opGppcqZHWhruhI0fFTFtPIlGKK3KOmJLPpaSvY0YTJ+
|
15
|
+
vaI3D6yQEMQoZ/mcXk928ofJJvOpUEmvjTW4Orz+T8NmiffLb64P50h86bdV+8tw
|
16
|
+
FJx6ix6vLF41LU2iPEYHuuXkA7+M5e+POGscJJCb1p6JKxzI6D/UVDnrbhOlqBa5
|
17
|
+
U45f0oXQ/ndOYUrBRu3BPFdNAjvpa0ld
|
18
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1 @@
|
|
1
|
+
unique_subject = yes
|
@@ -0,0 +1 @@
|
|
1
|
+
unique_subject = yes
|
@@ -0,0 +1 @@
|
|
1
|
+
V 120416201727Z 01 unknown /CN=giove.local/O=server
|
@@ -0,0 +1,53 @@
|
|
1
|
+
[ ca ]
|
2
|
+
default_ca = testca
|
3
|
+
|
4
|
+
[ testca ]
|
5
|
+
dir = .
|
6
|
+
certificate = $dir/cacert.pem
|
7
|
+
database = $dir/index.txt
|
8
|
+
new_certs_dir = $dir/certs
|
9
|
+
private_key = $dir/private/cakey.pem
|
10
|
+
serial = $dir/serial
|
11
|
+
|
12
|
+
default_crl_days = 7
|
13
|
+
default_days = 365
|
14
|
+
default_md = sha1
|
15
|
+
|
16
|
+
policy = testca_policy
|
17
|
+
x509_extensions = certificate_extensions
|
18
|
+
|
19
|
+
[ testca_policy ]
|
20
|
+
commonName = supplied
|
21
|
+
stateOrProvinceName = optional
|
22
|
+
countryName = optional
|
23
|
+
emailAddress = optional
|
24
|
+
organizationName = optional
|
25
|
+
organizationalUnitName = optional
|
26
|
+
|
27
|
+
[ certificate_extensions ]
|
28
|
+
basicConstraints = CA:false
|
29
|
+
|
30
|
+
[ req ]
|
31
|
+
default_bits = 2048
|
32
|
+
default_keyfile = ./private/cakey.pem
|
33
|
+
default_md = sha1
|
34
|
+
prompt = yes
|
35
|
+
distinguished_name = root_ca_distinguished_name
|
36
|
+
x509_extensions = root_ca_extensions
|
37
|
+
|
38
|
+
[ root_ca_distinguished_name ]
|
39
|
+
commonName = hostname
|
40
|
+
|
41
|
+
[ root_ca_extensions ]
|
42
|
+
basicConstraints = CA:true
|
43
|
+
keyUsage = keyCertSign, cRLSign
|
44
|
+
|
45
|
+
[ client_ca_extensions ]
|
46
|
+
basicConstraints = CA:false
|
47
|
+
keyUsage = digitalSignature
|
48
|
+
extendedKeyUsage = 1.3.6.1.5.5.7.3.2
|
49
|
+
|
50
|
+
[ server_ca_extensions ]
|
51
|
+
basicConstraints = CA:false
|
52
|
+
keyUsage = keyEncipherment
|
53
|
+
extendedKeyUsage = 1.3.6.1.5.5.7.3.1
|
@@ -0,0 +1,27 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIIEowIBAAKCAQEAyvGXVaNZZV160u3neS7npdVUatA5iRtU2fGwIKLyvX8elrIM
|
3
|
+
3ide82MABIXlMwfD6IJDalN2SGuE+dVQrWpqIhum2ymKXKOJbrSjO2jRjSTXFHw4
|
4
|
+
cMrfzWDsVzN8X2oTFo62x9HuKiiYBI5yS6aHhGvmKrgxtjV86HGWOfrqctKV+kXo
|
5
|
+
dREG47uvY/X+UGeruHL62knMjeSGLqt5Sk5nNk8VciDVZKSvQ5RiWVAQDgS0mxcR
|
6
|
+
mQ0aGNA929Wnkv1zH1b3KyYuPDbNmb0/ggMtClXigXkPfupA/2AIs3MQxi0b6jmV
|
7
|
+
zh2GhNi+dQ2my0E8ZPTRT4CMa2LRku0bUO3VIQIDAQABAoIBAQDJoXiDHFVgUZ0L
|
8
|
+
XlUBYKnEaIyDxzey0hXep7Me6eaUgW0JugLw4VsEI9NLqyBKMCfjpTCHvj6huzmV
|
9
|
+
4utSMI0cMC76Rm5ylgSgmhYnm3+/ZN/QOY71+YqcCfUmuj+SqNgoLEjLhPbEqipH
|
10
|
+
NKO4J88ysOUwgmrZppDgfKIOHw66Xlx0WtyFksozLve5pqxzs2gNZDmT5YdlGt+w
|
11
|
+
X2zaUr7GholPGUVzhZSlpBpPkloSNYyGPX7O25bc63Ev92m3vnroJZYFiaUaKcFE
|
12
|
+
M2RVVd3m8J47uoSwxl2ppnIgwodTWe20swc3d4cXK30U4USLsvWesthnfUc65QWa
|
13
|
+
KfeanOrBAoGBAOvxGM9ufV1EFyV3D4kDB2UGp2ccv2t+rJ+urpl7JLCw1Aetpc3v
|
14
|
+
Qg/QsbBfOhfI650zOZgzE5bG6B6wNYVLAC/UusrYgeLkyqKVbQgDTP+djD61jYjy
|
15
|
+
IG5RP7EumN07Gvja59B4Kw5zN6TB3MKGz9Qv3a2MOvyg/3TRnssHOkQ5AoGBANwy
|
16
|
+
V822s149G46tIbESw5ICcY8HorP1kD2syMeBQWKJcEgiSXL8Q3TIKdqaim8Q1Bqu
|
17
|
+
fSYwISUVsFDaTyvRl25hLfkQ0t+qsul7EcjNFHf9L7dJx7z/dj8lVTQWGYse5iVQ
|
18
|
+
aplx7fYQHgXdC7NjtpIrxUZkJ7bAl+0cpavdcCgpAoGAetCbO46mDyBcdBIPsiAz
|
19
|
+
fzEBfrkGIyxjKxPAqv/gz2CcXgrT3eiHGLhnZgmLscnSa5e4iTM9JSUQuri6g1HR
|
20
|
+
HRS8zs34fmTd3deuU5d0QzJ9SD81F24B16rPXqmExNP5bER2mpuSvgjXlBmdklye
|
21
|
+
XjM0TxxJsCsWDnb3E3QFrnECgYBSpXqbNZXBK0JqnMTmh1psNQqWWpFQ5jxLScza
|
22
|
+
RMNbzqYcDPJwfAp9jJtY92Q6J6DUmuVSLgJivu88iZPpqHMj9MmikBP160XXqF+W
|
23
|
+
dJLYLml4a/LSFzg0nziJojnYI7LSEorQKRjdoFMEdGDt5eEin9cdgn39c/ASCQyN
|
24
|
+
o0FzcQKBgHifRoEEyyHzepXiv2osPsOV9cEoWROLRaooE7boPISimJ1PCFGON0XT
|
25
|
+
20PmWJL3j3/f2Eqk47x4WpzLOp/OwUqqpaDpImtQX7GD7C+/PbAdbT1Q1Kc9kxc9
|
26
|
+
a5FJg85oJqDPB1yEmYG5nWIlqB3LOX/IdOfYSOUFvRiomwJJoxys
|
27
|
+
-----END RSA PRIVATE KEY-----
|
@@ -0,0 +1 @@
|
|
1
|
+
03
|
@@ -0,0 +1 @@
|
|
1
|
+
02
|
data/lib/amqp/channel.rb
CHANGED
@@ -118,12 +118,17 @@ module AMQP
|
|
118
118
|
# only send channel.open when connection is actually open. Makes it possible to
|
119
119
|
# do c = AMQP.connect; AMQP::Channel.new(c) that is what some people do. MK.
|
120
120
|
@connection.on_open do
|
121
|
-
self.open do
|
121
|
+
self.open do |ch, open_ok|
|
122
122
|
@channel_is_open_deferrable.succeed
|
123
123
|
|
124
|
-
|
125
|
-
|
126
|
-
|
124
|
+
if block
|
125
|
+
case block.arity
|
126
|
+
when 1 then block.call(ch)
|
127
|
+
else block.call(ch, open_ok)
|
128
|
+
end # case
|
129
|
+
end # if
|
130
|
+
end # self.open
|
131
|
+
end # @connection.on_open
|
127
132
|
end
|
128
133
|
|
129
134
|
|
data/lib/amqp/exchange.rb
CHANGED
@@ -294,6 +294,9 @@ module AMQP
|
|
294
294
|
# @option opts [String] :default_routing_key (nil) Default routing key that will be used by {Exchange#publish} when no routing key is not passed explicitly.
|
295
295
|
# It is perfectly fine for applications to always specify routing key to {Exchange#publish}.
|
296
296
|
#
|
297
|
+
# @option opts [Hash] :arguments (nil) A hash of optional arguments with the declaration. Some brokers implement
|
298
|
+
# AMQP extensions using x-prefixed declaration arguments.
|
299
|
+
#
|
297
300
|
#
|
298
301
|
# @raise [AMQP::Error] Raised when exchange is redeclared with parameters different from original declaration.
|
299
302
|
# @raise [AMQP::Error] Raised when exchange is declared with :passive => true and the exchange does not exist.
|
@@ -357,7 +360,7 @@ module AMQP
|
|
357
360
|
|
358
361
|
unless @opts[:no_declare]
|
359
362
|
@channel.once_open do
|
360
|
-
self.declare(passive = @opts[:passive], durable = @opts[:durable], exclusive = @opts[:exclusive], auto_delete = @opts[:auto_delete], nowait = @opts[:nowait],
|
363
|
+
self.declare(passive = @opts[:passive], durable = @opts[:durable], exclusive = @opts[:exclusive], auto_delete = @opts[:auto_delete], nowait = @opts[:nowait], @opts[:arguments], &shim)
|
361
364
|
end
|
362
365
|
end
|
363
366
|
else
|
data/lib/amqp/queue.rb
CHANGED
@@ -148,6 +148,12 @@ module AMQP
|
|
148
148
|
# method it will raise a channel or connection exception.
|
149
149
|
#
|
150
150
|
#
|
151
|
+
# @option opts [Hash] :arguments (nil) A hash of optional arguments with the declaration. Some brokers implement
|
152
|
+
# AMQP extensions using x-prefixed declaration arguments. For example, RabbitMQ
|
153
|
+
# recognizes x-message-ttl declaration arguments that defines TTL of messages in
|
154
|
+
# the queue.
|
155
|
+
#
|
156
|
+
#
|
151
157
|
# @yield [queue, declare_ok] Yields successfully declared queue instance and AMQP method (queue.declare-ok) instance. The latter is optional.
|
152
158
|
# @yieldparam [Queue] queue Queue that is successfully declared and is ready to be used.
|
153
159
|
# @yieldparam [AMQP::Protocol::Queue::DeclareOk] declare_ok AMQP queue.declare-ok) instance.
|
@@ -179,9 +185,9 @@ module AMQP
|
|
179
185
|
|
180
186
|
@channel.once_open do
|
181
187
|
if block
|
182
|
-
self.declare(@opts[:passive], @opts[:durable], @opts[:exclusive], @opts[:auto_delete], @opts[:nowait],
|
188
|
+
self.declare(@opts[:passive], @opts[:durable], @opts[:exclusive], @opts[:auto_delete], @opts[:nowait], @opts[:arguments], &shim)
|
183
189
|
else
|
184
|
-
self.declare(@opts[:passive], @opts[:durable], @opts[:exclusive], @opts[:auto_delete], @opts[:nowait],
|
190
|
+
self.declare(@opts[:passive], @opts[:durable], @opts[:exclusive], @opts[:auto_delete], @opts[:nowait], @opts[:arguments])
|
185
191
|
end
|
186
192
|
end
|
187
193
|
end
|
data/lib/amqp/version.rb
CHANGED
@@ -15,9 +15,12 @@ describe "Queue that was bound to default direct exchange thanks to Automatic Mo
|
|
15
15
|
amqp_before do
|
16
16
|
@channel = AMQP::Channel.new
|
17
17
|
@channel.should be_open
|
18
|
+
@channel.on_error do |*args|
|
19
|
+
puts "Channel-level error!"
|
20
|
+
end
|
18
21
|
|
19
|
-
@queue1 = @channel.queue("queue1")
|
20
|
-
@queue2 = @channel.queue("queue2")
|
22
|
+
@queue1 = @channel.queue("queue1", :auto_delete => true)
|
23
|
+
@queue2 = @channel.queue("queue2", :auto_delete => true)
|
21
24
|
|
22
25
|
# Rely on default direct exchange binding, see section 2.1.2.4 Automatic Mode in AMQP 0.9.1 spec.
|
23
26
|
@exchange = AMQP::Exchange.default(@channel)
|
@@ -55,7 +58,12 @@ describe "Queue that was bound to default direct exchange thanks to Automatic Mo
|
|
55
58
|
@exchange.publish("some white noise", :routing_key => "killa key")
|
56
59
|
end
|
57
60
|
|
58
|
-
|
61
|
+
delayed(0.3) {
|
62
|
+
# We never subscribe to it, hence, need to delete manually
|
63
|
+
@queue2.delete
|
64
|
+
}
|
65
|
+
|
66
|
+
done(0.5) {
|
59
67
|
number_of_received_messages.should == expected_number_of_messages
|
60
68
|
}
|
61
69
|
end # it
|
@@ -47,7 +47,7 @@ describe AMQP::Queue, "#pop" do
|
|
47
47
|
|
48
48
|
@queue.pop do |payload|
|
49
49
|
callback_has_fired = true
|
50
|
-
|
50
|
+
@queue.delete
|
51
51
|
payload.should be_nil
|
52
52
|
end
|
53
53
|
|
@@ -58,7 +58,7 @@ describe AMQP::Queue, "#pop" do
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
-
context "when THERE ARE messages in the queue" do
|
61
|
+
context "when THERE ARE messages in the queue" do
|
62
62
|
it "yields message payload to the callback" do
|
63
63
|
number_of_received_messages = 0
|
64
64
|
expected_number_of_messages = 300
|
@@ -71,7 +71,7 @@ describe AMQP::Queue, "#pop" do
|
|
71
71
|
expected_number_of_messages.times do
|
72
72
|
@queue.pop do |headers, payload|
|
73
73
|
payload.should_not be_nil
|
74
|
-
number_of_received_messages += 1
|
74
|
+
number_of_received_messages += 1
|
75
75
|
headers.message_count.should == (expected_number_of_messages - number_of_received_messages)
|
76
76
|
|
77
77
|
if RUBY_VERSION =~ /^1.9/
|
@@ -83,6 +83,10 @@ describe AMQP::Queue, "#pop" do
|
|
83
83
|
end # do
|
84
84
|
end
|
85
85
|
|
86
|
+
delayed(1.3) {
|
87
|
+
# Queue.Get doesn't qualify for subscription, hence, manual deletion is required
|
88
|
+
@queue.delete
|
89
|
+
}
|
86
90
|
done(1.5) {
|
87
91
|
number_of_received_messages.should == expected_number_of_messages
|
88
92
|
}
|
@@ -28,14 +28,12 @@ describe AMQP do
|
|
28
28
|
it "declares a new queue with that name" do
|
29
29
|
queue = @channel.queue(name)
|
30
30
|
queue.name.should == name
|
31
|
-
|
32
31
|
done
|
33
32
|
end
|
34
33
|
|
35
34
|
it "caches that queue" do
|
36
35
|
queue = @channel.queue(name)
|
37
36
|
@channel.queue(name).object_id.should == queue.object_id
|
38
|
-
|
39
37
|
done
|
40
38
|
end
|
41
39
|
end # context
|
@@ -44,29 +42,68 @@ describe AMQP do
|
|
44
42
|
it "uses server-assigned queue name" do
|
45
43
|
@channel.queue("") do |queue, *args|
|
46
44
|
queue.name.should_not be_empty
|
47
|
-
|
45
|
+
queue.delete
|
46
|
+
done(0.3)
|
48
47
|
end
|
49
48
|
end
|
50
49
|
end # context
|
51
50
|
|
52
51
|
|
52
|
+
context "when queue is redeclared with different attributes" do
|
53
|
+
let(:name) { "amqp-gem.nondurable.queue" }
|
54
|
+
let(:options) { {:durable => false, :passive => false} }
|
55
|
+
let(:different_options) { {:durable => true, :passive => false} }
|
56
|
+
amqp_before do
|
57
|
+
@queue = @channel.queue(name, options)
|
58
|
+
delayed(0.25) { @queue.delete }
|
59
|
+
end
|
60
|
+
|
61
|
+
context "on the same channel" do
|
62
|
+
it "should raise ruby exception" do
|
63
|
+
expect {
|
64
|
+
@other_queue = @channel.queue(name, different_options)
|
65
|
+
}.to raise_error(AMQP::IncompatibleOptionsError)
|
66
|
+
@queue.delete
|
67
|
+
done(0.2)
|
68
|
+
end
|
69
|
+
end
|
53
70
|
|
71
|
+
context "on different channels (or even in different processes)" do
|
72
|
+
amqp_before { @other_channel = AMQP::Channel.new }
|
73
|
+
|
74
|
+
it "should not raise ruby exception" do
|
75
|
+
expect {
|
76
|
+
@other_queue = @other_channel.queue(name, different_options)
|
77
|
+
}.to_not raise_error
|
78
|
+
done
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should trigger channel-level #on_error callback" do
|
82
|
+
@other_channel.on_error {|*args| @callback_fired = true }
|
83
|
+
@other_queue = @other_channel.queue(name, different_options)
|
84
|
+
done(0.35) {
|
85
|
+
@callback_fired.should be_true
|
86
|
+
@other_channel.should be_closed
|
87
|
+
}
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
54
91
|
|
55
92
|
context "when passive option is used" do
|
56
|
-
context "and
|
93
|
+
context "and queue with given name already exists" do
|
57
94
|
it "silently returns" do
|
58
95
|
name = "a_new_queue declared at #{Time.now.to_i}"
|
59
96
|
|
60
|
-
|
61
|
-
|
97
|
+
original_queue = @channel.queue(name)
|
98
|
+
queue = @channel.queue(name, :passive => true)
|
62
99
|
|
63
|
-
|
100
|
+
queue.should == original_queue
|
64
101
|
|
65
102
|
done
|
66
103
|
end # it
|
67
104
|
end
|
68
105
|
|
69
|
-
context "and
|
106
|
+
context "and queue with given name DOES NOT exist" do
|
70
107
|
it "raises an exception" do
|
71
108
|
pending "Not yet supported"
|
72
109
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: amqp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.0.
|
4
|
+
version: 0.8.0.rc2
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,12 +11,12 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain:
|
14
|
-
date: 2011-04-
|
14
|
+
date: 2011-04-18 00:00:00.000000000
|
15
15
|
default_executable:
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: eventmachine
|
19
|
-
requirement: &
|
19
|
+
requirement: &2168550180 !ruby/object:Gem::Requirement
|
20
20
|
none: false
|
21
21
|
requirements:
|
22
22
|
- - ~>
|
@@ -24,18 +24,18 @@ dependencies:
|
|
24
24
|
version: 0.12.10
|
25
25
|
type: :runtime
|
26
26
|
prerelease: false
|
27
|
-
version_requirements: *
|
27
|
+
version_requirements: *2168550180
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: amq-client
|
30
|
-
requirement: &
|
30
|
+
requirement: &2168549540 !ruby/object:Gem::Requirement
|
31
31
|
none: false
|
32
32
|
requirements:
|
33
33
|
- - ! '>='
|
34
34
|
- !ruby/object:Gem::Version
|
35
|
-
version:
|
35
|
+
version: 0.7.0.alpha2
|
36
36
|
type: :runtime
|
37
37
|
prerelease: false
|
38
|
-
version_requirements: *
|
38
|
+
version_requirements: *2168549540
|
39
39
|
description: Asynchronous AMQP 0.9.1 client for Ruby. Built on top of Eventmachine.
|
40
40
|
email:
|
41
41
|
- michael@novemberain.com
|
@@ -44,24 +44,6 @@ executables: []
|
|
44
44
|
extensions: []
|
45
45
|
extra_rdoc_files:
|
46
46
|
- README.textile
|
47
|
-
- doc/_index.html
|
48
|
-
- doc/AMQP.html
|
49
|
-
- doc/class_list.html
|
50
|
-
- doc/EXAMPLE_01_PINGPONG
|
51
|
-
- doc/EXAMPLE_02_CLOCK
|
52
|
-
- doc/EXAMPLE_03_STOCKS
|
53
|
-
- doc/EXAMPLE_04_MULTICLOCK
|
54
|
-
- doc/EXAMPLE_05_ACK
|
55
|
-
- doc/EXAMPLE_05_POP
|
56
|
-
- doc/EXAMPLE_06_HASHTABLE
|
57
|
-
- doc/file.README.html
|
58
|
-
- doc/file.VendorSpecificExtensions.html
|
59
|
-
- doc/file_list.html
|
60
|
-
- doc/frames.html
|
61
|
-
- doc/index.html
|
62
|
-
- doc/method_list.html
|
63
|
-
- doc/MQ.html
|
64
|
-
- doc/top-level-namespace.html
|
65
47
|
files:
|
66
48
|
- .gitignore
|
67
49
|
- .rspec
|
@@ -77,19 +59,34 @@ files:
|
|
77
59
|
- bin/irb
|
78
60
|
- bin/jenkins.sh
|
79
61
|
- bin/set_test_suite_realms_up.sh
|
80
|
-
-
|
81
|
-
- doc/EXAMPLE_02_CLOCK
|
82
|
-
- doc/EXAMPLE_03_STOCKS
|
83
|
-
- doc/EXAMPLE_04_MULTICLOCK
|
84
|
-
- doc/EXAMPLE_05_ACK
|
85
|
-
- doc/EXAMPLE_05_POP
|
86
|
-
- doc/EXAMPLE_06_HASHTABLE
|
62
|
+
- docs/RabbitMQVersions.textile
|
87
63
|
- docs/VendorSpecificExtensions.textile
|
64
|
+
- examples/extensions/rabbitmq/per_queue_message_ttl.rb
|
88
65
|
- examples/extensions/rabbitmq/publisher_confirmations_with_transient_messages.rb
|
89
66
|
- examples/hello_world.rb
|
90
67
|
- examples/real-world/task-queue/README.textile
|
91
68
|
- examples/real-world/task-queue/consumer.rb
|
92
69
|
- examples/real-world/task-queue/producer.rb
|
70
|
+
- examples/tls_certificates/client/cert.pem
|
71
|
+
- examples/tls_certificates/client/key.pem
|
72
|
+
- examples/tls_certificates/client/keycert.p12
|
73
|
+
- examples/tls_certificates/client/req.pem
|
74
|
+
- examples/tls_certificates/server/cert.pem
|
75
|
+
- examples/tls_certificates/server/key.pem
|
76
|
+
- examples/tls_certificates/server/keycert.p12
|
77
|
+
- examples/tls_certificates/server/req.pem
|
78
|
+
- examples/tls_certificates/testca/cacert.cer
|
79
|
+
- examples/tls_certificates/testca/cacert.pem
|
80
|
+
- examples/tls_certificates/testca/certs/01.pem
|
81
|
+
- examples/tls_certificates/testca/certs/02.pem
|
82
|
+
- examples/tls_certificates/testca/index.txt
|
83
|
+
- examples/tls_certificates/testca/index.txt.attr
|
84
|
+
- examples/tls_certificates/testca/index.txt.attr.old
|
85
|
+
- examples/tls_certificates/testca/index.txt.old
|
86
|
+
- examples/tls_certificates/testca/openssl.cnf
|
87
|
+
- examples/tls_certificates/testca/private/cakey.pem
|
88
|
+
- examples/tls_certificates/testca/serial
|
89
|
+
- examples/tls_certificates/testca/serial.old
|
93
90
|
- examples/various/ack.rb
|
94
91
|
- examples/various/automatic_binding_for_default_direct_exchange.rb
|
95
92
|
- examples/various/basic_get.rb
|
@@ -146,42 +143,40 @@ files:
|
|
146
143
|
- spec/unit/amqp/basic_spec.rb
|
147
144
|
- spec/unit/amqp/connection_spec.rb
|
148
145
|
- tasks.rb
|
149
|
-
- doc/_index.html
|
150
|
-
- doc/AMQP.html
|
151
|
-
- doc/class_list.html
|
152
|
-
- doc/file.README.html
|
153
|
-
- doc/file.VendorSpecificExtensions.html
|
154
|
-
- doc/file_list.html
|
155
|
-
- doc/frames.html
|
156
|
-
- doc/index.html
|
157
|
-
- doc/method_list.html
|
158
|
-
- doc/MQ.html
|
159
|
-
- doc/top-level-namespace.html
|
160
146
|
has_rdoc: true
|
161
147
|
homepage: http://github.com/ruby-amqp/amqp
|
162
148
|
licenses: []
|
163
|
-
post_install_message: ! "[\e[32mVersion 0.8.0\e[0m] [API] AMQP::
|
164
|
-
|
149
|
+
post_install_message: ! "[\e[32mVersion 0.8.0\e[0m] [API] AMQP::Exchange#initialize
|
150
|
+
now accepts :arguments option that takes a hash. Brokers\n[\e[32mVersion 0.8.0\e[0m]
|
151
|
+
[API] AMQP::Queue#initialize now accepts :arguments option that takes a hash. RabbitMQ\n[\e[32mVersion
|
152
|
+
0.8.0\e[0m] [API] AMQP#Logger is deprecated. It will be removed before 1.0 release.\n[\e[32mVersion
|
153
|
+
0.8.0\e[0m] [API] AMQP#fork is deprecated. It will be removed before 1.0 release.\n[\e[32mVersion
|
154
|
+
0.8.0\e[0m] [API] AMQP::RPC is deprecated. It will be removed before 1.0 release.\n[\e[32mVersion
|
155
|
+
0.8.0\e[0m] [FEATURE] Significant improvements to the documentation\n[\e[32mVersion
|
156
|
+
0.8.0\e[0m] [FEATURE] Support for RabbitMQ extensions to AMQP 0.9.1\n[\e[32mVersion
|
157
|
+
0.8.0\e[0m] [API] AMQP::Exchange#publish now accepts (an optional) block that is
|
158
|
+
called as soon as message\n[\e[32mVersion 0.8.0\e[0m] [API] AMQP::Channel.new now
|
159
|
+
accepts (an optional) block and yields newly opened channel to it as soon as\n[\e[32mVersion
|
165
160
|
0.8.0\e[0m] [API] AMQP::Header#ack now can acknowledge multiple deliveries\n[\e[32mVersion
|
166
161
|
0.8.0\e[0m] [API] AMQP::Exchange#delete now takes (an optional) block that is called
|
167
162
|
when exchange.delete-ok response arrives.\n[\e[32mVersion 0.8.0\e[0m] [API] AMQP::Header
|
168
163
|
now implements #to_hash\n[\e[32mVersion 0.8.0\e[0m] [API] AMQP::Queue#pop block
|
169
|
-
now can take 1, 2 or
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
0.8.0\e[0m] [API] AMQP::Queue#
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
164
|
+
now can take 1, 2 or 3 arguments.\n[\e[32mVersion 0.8.0\e[0m] [API] AMQP::Queue#purge
|
165
|
+
\ now takes an optional block which is called when queue.purge-ok response arrives.\n[\e[32mVersion
|
166
|
+
0.8.0\e[0m] [API] AMQP::Queue#delete now takes an optional block which is called
|
167
|
+
when queue.delete-ok response arrives.\n[\e[32mVersion 0.8.0\e[0m] [API] AMQP::Queue#delete
|
168
|
+
now accepts :nowait option.\n[\e[32mVersion 0.8.0\e[0m] [API] AMQP::Queue#unbind
|
169
|
+
now takes an optional block which is called when queue.unbind-ok response arrives.\n[\e[32mVersion
|
170
|
+
0.8.0\e[0m] [API] AMQP::Queue#unbind now accepts :routing_key as alias to :key.
|
171
|
+
we believe it is a good idea to use AMQP terms.\n[\e[32mVersion 0.8.0\e[0m] [API]
|
172
|
+
AMQP::Channel#prefetch now takes (an optional) 2nd parameter that specifies\n[\e[32mVersion
|
173
|
+
0.8.0\e[0m] [API] AMQP::Channel#recover now takes (an optional) callback that is
|
174
|
+
called when\n[\e[32mVersion 0.8.0\e[0m] [API] AMQP::Frame is gone.\n[\e[32mVersion
|
175
|
+
0.8.0\e[0m] [API] AMQP::Buffer is gone. Serialization & framing are now handled
|
176
|
+
primarily by amq-protocol.\n[\e[32mVersion 0.8.0\e[0m] [FEATURE] AMQP gem is now
|
177
|
+
AMQP 0.9.1 compatible: it runs atop of amq-client gem\n[\e[32mVersion 0.8.0\e[0m]
|
178
|
+
[API] AMQP::Queue#publish is deprecated.\n[\e[32mVersion 0.8.0\e[0m] [API] Name
|
179
|
+
argument for AMQP::Queue.new and Channel#queue is optional.\n"
|
185
180
|
rdoc_options:
|
186
181
|
- --include=examples --main README.textile
|
187
182
|
require_paths:
|