amqp 0.8.0.rc1 → 0.8.0.rc2
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|