amqp 0.8.0.rc2 → 0.8.0.rc3
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -3
- data/.travis.yml +5 -2
- data/.yardopts +2 -0
- data/CHANGELOG +17 -20
- data/Gemfile +7 -5
- data/README.textile +67 -29
- data/Rakefile +6 -0
- data/amqp.gemspec +5 -5
- data/docs/08Migration.textile +27 -0
- data/docs/Bindings.textile +27 -0
- data/docs/ConnectingToTheBroker.textile +277 -0
- data/docs/DocumentationGuidesIndex.textile +25 -0
- data/docs/Durability.textile +27 -0
- data/docs/ErrorHandling.textile +84 -0
- data/docs/Exchanges.textile +27 -0
- data/docs/GettingStarted.textile +585 -0
- data/docs/Queues.textile +27 -0
- data/docs/RabbitMQVersions.textile +12 -2
- data/docs/Routing.textile +27 -0
- data/docs/TLS.textile +27 -0
- data/docs/VendorSpecificExtensions.textile +11 -1
- data/examples/{various → channels}/open_channel_without_assignment.rb +0 -4
- data/examples/channels/prefetch_as_constructor_argument.rb +31 -0
- data/examples/channels/qos_aka_prefetch.rb +34 -0
- data/examples/channels/qos_aka_prefetch_without_callback.rb +32 -0
- data/examples/error_handling/channel_level_exception.rb +47 -0
- data/examples/error_handling/channel_level_exception_with_multiple_channels_involved.rb +54 -0
- data/examples/error_handling/connection_loss_handler.rb +39 -0
- data/examples/error_handling/global_channel_level_exception_handler.rb +65 -0
- data/examples/error_handling/handling_authentication_failure_with_a_callback.rb +33 -0
- data/examples/error_handling/tcp_connection_failure_handling_with_a_rescue_block.rb +30 -0
- data/examples/error_handling/tcp_connection_failure_with_a_callback.rb +28 -0
- data/examples/{various → exchanges}/declare_an_exchange_without_assignment.rb +0 -4
- data/examples/guides/getting_started/01_hello_world.rb +24 -0
- data/examples/guides/getting_started/02_hello_world_dslified.rb +23 -0
- data/examples/guides/getting_started/03_babblr.rb +33 -0
- data/examples/guides/getting_started/04_weathr.rb +56 -0
- data/examples/hello_world.rb +12 -13
- data/examples/hello_world_with_eventmachine_in_a_separate_thread.rb +37 -0
- data/examples/{various → legacy}/ack.rb +0 -0
- data/examples/{various → legacy}/callbacks.rb +0 -0
- data/examples/{various → legacy}/clock.rb +0 -0
- data/examples/{various → legacy}/hashtable.rb +0 -0
- data/examples/{various → legacy}/logger.rb +0 -0
- data/examples/{various → legacy}/multiclock.rb +0 -0
- data/examples/{various → legacy}/pingpong.rb +0 -2
- data/examples/{various → legacy}/primes-simple.rb +0 -0
- data/examples/{various → legacy}/primes.rb +0 -2
- data/examples/{various → legacy}/stocks.rb +0 -0
- data/examples/{various → queues}/automatic_binding_for_default_direct_exchange.rb +4 -0
- data/examples/{various → queues}/basic_get.rb +0 -2
- data/examples/{various → queues}/declare_a_queue_without_assignment.rb +0 -4
- data/examples/queues/declare_and_bind_a_server_named_queue.rb +43 -0
- data/examples/{various → queues}/queue_status.rb +3 -8
- data/examples/{various → routing}/pubsub.rb +0 -0
- data/examples/{various → routing}/weather_updates.rb +1 -1
- data/lib/amqp/channel.rb +231 -52
- data/lib/amqp/client.rb +6 -3
- data/lib/amqp/connection.rb +9 -10
- data/lib/amqp/deprecated/fork.rb +3 -3
- data/lib/amqp/deprecated/logger.rb +1 -0
- data/lib/amqp/deprecated/mq.rb +23 -1
- data/lib/amqp/deprecated/rpc.rb +1 -0
- data/lib/amqp/exceptions.rb +45 -3
- data/lib/amqp/exchange.rb +29 -35
- data/lib/amqp/ext/em.rb +0 -7
- data/lib/amqp/ext/emfork.rb +3 -2
- data/lib/amqp/header.rb +4 -0
- data/lib/amqp/queue.rb +96 -33
- data/lib/amqp/session.rb +140 -0
- data/lib/amqp/version.rb +6 -1
- data/spec/integration/automatic_binding_for_default_direct_exchange_spec.rb +7 -7
- data/spec/integration/channel_level_exception_with_multiple_channels_spec.rb +69 -0
- data/spec/integration/declare_and_immediately_bind_a_server_named_queue_spec.rb +42 -0
- data/spec/integration/queue_declaration_spec.rb +8 -24
- data/spec/integration/queue_redeclaration_with_incompatible_attributes_spec.rb +43 -0
- data/spec/unit/amqp/connection_spec.rb +1 -1
- metadata +200 -182
- data/lib/amqp/basic_client.rb +0 -27
data/lib/amqp/session.rb
ADDED
@@ -0,0 +1,140 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require "amq/client/adapters/event_machine"
|
4
|
+
|
5
|
+
module AMQP
|
6
|
+
# AMQP session represents connection to the broker. Session objects let you define callbacks for
|
7
|
+
# various TCP connection lifecycle events, for instance:
|
8
|
+
#
|
9
|
+
# * Connection is established
|
10
|
+
# * Connection has failed
|
11
|
+
# * Authentication has failed
|
12
|
+
# * Connection is lost (there is a network failure)
|
13
|
+
# * AMQP connection is opened
|
14
|
+
# * AMQP connection parameters (tuning) are negotiated and accepted by the broker
|
15
|
+
# * AMQP connection is properly closed
|
16
|
+
#
|
17
|
+
# h2. Key methods
|
18
|
+
#
|
19
|
+
# * {Session#on_connection}
|
20
|
+
# * {Session#on_open}
|
21
|
+
# * {Session#on_disconnection}
|
22
|
+
# * {Session#on_possible_authentication_failure}
|
23
|
+
# * {Session#on_tcp_connection_failure}
|
24
|
+
# * {Session#on_tcp_connection_loss}
|
25
|
+
# * {Session#reconnect}
|
26
|
+
# * {Session#connected?}
|
27
|
+
#
|
28
|
+
#
|
29
|
+
# @api public
|
30
|
+
class Session < AMQ::Client::EventMachineClient
|
31
|
+
|
32
|
+
#
|
33
|
+
# API
|
34
|
+
#
|
35
|
+
|
36
|
+
# @api plugin
|
37
|
+
def connected?
|
38
|
+
self.opened?
|
39
|
+
end
|
40
|
+
|
41
|
+
# Reconnect to the broker using current connection settings.
|
42
|
+
#
|
43
|
+
# @param [Boolean] force Enforce immediate connection
|
44
|
+
# @param [Fixnum] period If given, reconnection will be delayed by this period, in seconds.
|
45
|
+
# @api plugin
|
46
|
+
def reconnect(force = false, period = 2)
|
47
|
+
# we do this to make sure this method shows up in our documentation
|
48
|
+
# this method is too important to leave out and YARD currently does not
|
49
|
+
# support cross-referencing to dependencies. MK.
|
50
|
+
super(force, period)
|
51
|
+
end # reconnect(force = false)
|
52
|
+
|
53
|
+
|
54
|
+
# Defines a callback that will be executed when AMQP connection is considered open,
|
55
|
+
# after client and broker has agreed on max channel identifier and maximum allowed frame
|
56
|
+
# size. You can define more than one callback.
|
57
|
+
#
|
58
|
+
# @see #on_open
|
59
|
+
# @api public
|
60
|
+
def on_connection(&block)
|
61
|
+
# defined here to make this method appear in YARD documentation. MK.
|
62
|
+
super(&block)
|
63
|
+
end # on_connection(&block)
|
64
|
+
|
65
|
+
# Defines a callback that will be executed when AMQP connection is considered open,
|
66
|
+
# before client and broker has agreed on max channel identifier and maximum allowed frame
|
67
|
+
# size. You can define more than one callback.
|
68
|
+
#
|
69
|
+
# @see #on_connection
|
70
|
+
# @api public
|
71
|
+
def on_open(&block)
|
72
|
+
# defined here to make this method appear in YARD documentation. MK.
|
73
|
+
super(&block)
|
74
|
+
end # on_open(&block)
|
75
|
+
|
76
|
+
# Defines a callback that will be run when broker confirms connection termination
|
77
|
+
# (client receives connection.close-ok). You can define more than one callback.
|
78
|
+
#
|
79
|
+
# @api public
|
80
|
+
def on_disconnection(&block)
|
81
|
+
# defined here to make this method appear in YARD documentation. MK.
|
82
|
+
super(&block)
|
83
|
+
end # on_disconnection(&block)
|
84
|
+
|
85
|
+
# Defines a callback that will be run when initial TCP connection fails.
|
86
|
+
# You can define only one callback.
|
87
|
+
#
|
88
|
+
# @api public
|
89
|
+
def on_tcp_connection_failure(&block)
|
90
|
+
# defined here to make this method appear in YARD documentation. MK.
|
91
|
+
super(&block)
|
92
|
+
end
|
93
|
+
|
94
|
+
# Defines a callback that will be run when initial TCP connection fails.
|
95
|
+
# You can define only one callback.
|
96
|
+
#
|
97
|
+
# @api public
|
98
|
+
def on_tcp_connection_loss(&block)
|
99
|
+
# defined here to make this method appear in YARD documentation. MK.
|
100
|
+
super(&block)
|
101
|
+
end
|
102
|
+
|
103
|
+
# Defines a callback that will be run when TCP connection is closed before authentication
|
104
|
+
# finishes. Usually this means authentication failure. You can define only one callback.
|
105
|
+
#
|
106
|
+
# @api public
|
107
|
+
def on_possible_authentication_failure(&block)
|
108
|
+
# defined here to make this method appear in YARD documentation. MK.
|
109
|
+
super(&block)
|
110
|
+
end
|
111
|
+
|
112
|
+
|
113
|
+
# Properly close connection with AMQ broker, as described in
|
114
|
+
# section 2.2.4 of the {http://bit.ly/hw2ELX AMQP 0.9.1 specification}.
|
115
|
+
#
|
116
|
+
# @api plugin
|
117
|
+
# @see #close_connection
|
118
|
+
def disconnect(reply_code = 200, reply_text = "Goodbye", &block)
|
119
|
+
# defined here to make this method appear in YARD documentation. MK.
|
120
|
+
super(reply_code, reply_text, &block)
|
121
|
+
end
|
122
|
+
alias close disconnect
|
123
|
+
|
124
|
+
|
125
|
+
|
126
|
+
#
|
127
|
+
# Implementation
|
128
|
+
#
|
129
|
+
|
130
|
+
# Overrides TCP connection failure exception to one that inherits from AMQP::Error
|
131
|
+
# and thus is backwards compatible.
|
132
|
+
#
|
133
|
+
# @private
|
134
|
+
# @api plugin
|
135
|
+
# @return [Class] AMQP::TCPConnectionFailed
|
136
|
+
def self.tcp_connection_failure_exception_class
|
137
|
+
@tcp_connection_failure_exception_class ||= AMQP::TCPConnectionFailed
|
138
|
+
end # self.tcp_connection_failure_exception_class
|
139
|
+
end # Session
|
140
|
+
end # AMQP
|
data/lib/amqp/version.rb
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
module AMQP
|
4
|
-
|
4
|
+
# AMQP gem version. Not to be confused with AMQP protocol version
|
5
|
+
# it implements. For that, see {AMQ::Protocol::VERSION}
|
6
|
+
#
|
7
|
+
# @see AMQ::Protocol::VERSION
|
8
|
+
# @return [String] AMQP gem version
|
9
|
+
VERSION = '0.8.0.rc3'
|
5
10
|
end
|
@@ -10,17 +10,17 @@ describe "Queue that was bound to default direct exchange thanks to Automatic Mo
|
|
10
10
|
|
11
11
|
include EventedSpec::AMQPSpec
|
12
12
|
|
13
|
-
default_timeout
|
13
|
+
default_timeout 3
|
14
14
|
|
15
15
|
amqp_before do
|
16
16
|
@channel = AMQP::Channel.new
|
17
17
|
@channel.should be_open
|
18
|
-
@channel.on_error do
|
19
|
-
|
18
|
+
@channel.on_error do |ch, close|
|
19
|
+
raise "Channel-level error!: #{close.inspect}"
|
20
20
|
end
|
21
21
|
|
22
|
-
@queue1 = @channel.queue("queue1", :auto_delete => true)
|
23
|
-
@queue2 = @channel.queue("queue2", :auto_delete => true)
|
22
|
+
@queue1 = @channel.queue("amqpgem.tests.integration.queue1", :auto_delete => true)
|
23
|
+
@queue2 = @channel.queue("amqpgem.tests.integration.queue2", :auto_delete => true)
|
24
24
|
|
25
25
|
# Rely on default direct exchange binding, see section 2.1.2.4 Automatic Mode in AMQP 0.9.1 spec.
|
26
26
|
@exchange = AMQP::Exchange.default(@channel)
|
@@ -58,12 +58,12 @@ describe "Queue that was bound to default direct exchange thanks to Automatic Mo
|
|
58
58
|
@exchange.publish("some white noise", :routing_key => "killa key")
|
59
59
|
end
|
60
60
|
|
61
|
-
delayed(0.
|
61
|
+
delayed(0.6) {
|
62
62
|
# We never subscribe to it, hence, need to delete manually
|
63
63
|
@queue2.delete
|
64
64
|
}
|
65
65
|
|
66
|
-
done(0.
|
66
|
+
done(0.9) {
|
67
67
|
number_of_received_messages.should == expected_number_of_messages
|
68
68
|
}
|
69
69
|
end # it
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe AMQP do
|
6
|
+
|
7
|
+
#
|
8
|
+
# Environment
|
9
|
+
#
|
10
|
+
|
11
|
+
include EventedSpec::AMQPSpec
|
12
|
+
|
13
|
+
default_timeout 5
|
14
|
+
|
15
|
+
|
16
|
+
#
|
17
|
+
# Examples
|
18
|
+
#
|
19
|
+
|
20
|
+
|
21
|
+
context "when queue is redeclared with different attributes across two channels" do
|
22
|
+
let(:name) { "amqp-gem.nondurable.queue" }
|
23
|
+
let(:options) {
|
24
|
+
{ :durable => false, :passive => false }
|
25
|
+
}
|
26
|
+
let(:different_options) {
|
27
|
+
{ :durable => true, :passive => false }
|
28
|
+
}
|
29
|
+
|
30
|
+
|
31
|
+
it "should trigger channel-level #on_error callback" do
|
32
|
+
@channel = AMQP::Channel.new
|
33
|
+
@channel.on_error do |ch, close|
|
34
|
+
puts "This should never happen"
|
35
|
+
end
|
36
|
+
@q1 = @channel.queue(name, options)
|
37
|
+
|
38
|
+
# backwards compatibility, please consider against
|
39
|
+
# using global error handlers in your programs!
|
40
|
+
AMQP::Channel.on_error do |msg|
|
41
|
+
puts "Global handler has fired: #{msg}"
|
42
|
+
@global_callback_fired = true
|
43
|
+
end
|
44
|
+
|
45
|
+
# Small delays to ensure the order of execution
|
46
|
+
delayed(0.1) {
|
47
|
+
@other_channel = AMQP::Channel.new
|
48
|
+
@other_channel.on_error do |ch, close|
|
49
|
+
@callback_fired = true
|
50
|
+
end
|
51
|
+
puts "other_channel.id = #{@other_channel.id}"
|
52
|
+
@q2 = @other_channel.queue(name, different_options)
|
53
|
+
}
|
54
|
+
|
55
|
+
delayed(0.3) {
|
56
|
+
@q1.delete
|
57
|
+
@q2.delete
|
58
|
+
}
|
59
|
+
|
60
|
+
done(0.4) {
|
61
|
+
@callback_fired.should be_true
|
62
|
+
@global_callback_fired.should be_true
|
63
|
+
# looks like there is a difference between platforms/machines
|
64
|
+
# so check either one. MK.
|
65
|
+
@other_channel.closed?.should be_true
|
66
|
+
}
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end # describe AMQP
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe "Server-named", AMQP::Queue do
|
6
|
+
|
7
|
+
#
|
8
|
+
# Environment
|
9
|
+
#
|
10
|
+
|
11
|
+
include EventedSpec::AMQPSpec
|
12
|
+
|
13
|
+
default_timeout 5
|
14
|
+
|
15
|
+
amqp_before do
|
16
|
+
@channel = AMQP::Channel.new
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
#
|
21
|
+
# Examples
|
22
|
+
#
|
23
|
+
|
24
|
+
|
25
|
+
it "delays binding until after queue.declare-ok arrives" do
|
26
|
+
mailbox = []
|
27
|
+
exchange = @channel.fanout("amq.fanout")
|
28
|
+
input = "Independencia de resolución, ¿una realidad en Mac OS X Lion?"
|
29
|
+
|
30
|
+
@channel.queue("", :auto_delete => true).bind(exchange).subscribe do |header, body|
|
31
|
+
mailbox << body
|
32
|
+
end
|
33
|
+
|
34
|
+
delayed(0.3) {
|
35
|
+
exchange.publish(input)
|
36
|
+
}
|
37
|
+
|
38
|
+
done(0.5) {
|
39
|
+
mailbox.size.should == 1
|
40
|
+
}
|
41
|
+
end
|
42
|
+
end
|
@@ -50,9 +50,13 @@ describe AMQP do
|
|
50
50
|
|
51
51
|
|
52
52
|
context "when queue is redeclared with different attributes" do
|
53
|
-
let(:name)
|
54
|
-
let(:options)
|
55
|
-
|
53
|
+
let(:name) { "amqp-gem.nondurable.queue" }
|
54
|
+
let(:options) {
|
55
|
+
{ :durable => false, :passive => false }
|
56
|
+
}
|
57
|
+
let(:different_options) {
|
58
|
+
{ :durable => true, :passive => false}
|
59
|
+
}
|
56
60
|
amqp_before do
|
57
61
|
@queue = @channel.queue(name, options)
|
58
62
|
delayed(0.25) { @queue.delete }
|
@@ -61,32 +65,12 @@ describe AMQP do
|
|
61
65
|
context "on the same channel" do
|
62
66
|
it "should raise ruby exception" do
|
63
67
|
expect {
|
64
|
-
@
|
68
|
+
@channel.queue(name, different_options)
|
65
69
|
}.to raise_error(AMQP::IncompatibleOptionsError)
|
66
70
|
@queue.delete
|
67
71
|
done(0.2)
|
68
72
|
end
|
69
73
|
end
|
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
74
|
end
|
91
75
|
|
92
76
|
context "when passive option is used" do
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe AMQP do
|
6
|
+
|
7
|
+
#
|
8
|
+
# Environment
|
9
|
+
#
|
10
|
+
|
11
|
+
include EventedSpec::AMQPSpec
|
12
|
+
|
13
|
+
default_timeout 5
|
14
|
+
|
15
|
+
|
16
|
+
#
|
17
|
+
# Examples
|
18
|
+
#
|
19
|
+
|
20
|
+
context "when queue is redeclared with different attributes" do
|
21
|
+
let(:name) { "amqp-gem.nondurable.queue" }
|
22
|
+
let(:options) {
|
23
|
+
{ :durable => false, :passive => false }
|
24
|
+
}
|
25
|
+
let(:different_options) {
|
26
|
+
{ :durable => true, :passive => false}
|
27
|
+
}
|
28
|
+
|
29
|
+
|
30
|
+
it "should raise AMQP::IncompatibleOptionsError" do
|
31
|
+
channel = AMQP::Channel.new
|
32
|
+
channel.on_error do |ch, close|
|
33
|
+
@callback_fired = true
|
34
|
+
end
|
35
|
+
|
36
|
+
channel.queue(name, options)
|
37
|
+
expect {
|
38
|
+
channel.queue(name, different_options)
|
39
|
+
}.to raise_error(AMQP::IncompatibleOptionsError)
|
40
|
+
done
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end # describe AMQP
|
metadata
CHANGED
@@ -1,202 +1,220 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: amqp
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.0.rc2
|
3
|
+
version: !ruby/object:Gem::Version
|
5
4
|
prerelease: 6
|
5
|
+
version: 0.8.0.rc3
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
8
|
-
- Aman Gupta
|
9
|
-
- Jakub Stastny aka botanicus
|
10
|
-
- Michael S. Klishin
|
7
|
+
authors:
|
8
|
+
- Aman Gupta
|
9
|
+
- Jakub Stastny aka botanicus
|
10
|
+
- Michael S. Klishin
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain:
|
14
|
-
date: 2011-04-
|
14
|
+
date: 2011-04-30 00:00:00
|
15
15
|
default_executable:
|
16
|
-
dependencies:
|
17
|
-
- !ruby/object:Gem::Dependency
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
- !ruby/object:Gem::Dependency
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
description:
|
40
|
-
email:
|
41
|
-
- michael@novemberain.com
|
42
|
-
- stastny@101ideas.cz
|
16
|
+
dependencies:
|
17
|
+
- !ruby/object:Gem::Dependency
|
18
|
+
name: eventmachine
|
19
|
+
prerelease: false
|
20
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
21
|
+
none: false
|
22
|
+
requirements:
|
23
|
+
- - ">="
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: "0"
|
26
|
+
type: :runtime
|
27
|
+
version_requirements: *id001
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: amq-client
|
30
|
+
prerelease: false
|
31
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
32
|
+
none: false
|
33
|
+
requirements:
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 0.7.0.alpha13
|
37
|
+
type: :runtime
|
38
|
+
version_requirements: *id002
|
39
|
+
description: Widely used, feature-rich asynchronous AMQP 0.9.1 client with batteries included
|
40
|
+
email:
|
41
|
+
- michael@novemberain.com
|
42
|
+
- stastny@101ideas.cz
|
43
43
|
executables: []
|
44
|
+
|
44
45
|
extensions: []
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
- .
|
49
|
-
- .
|
50
|
-
- .
|
51
|
-
- .
|
52
|
-
-
|
53
|
-
-
|
54
|
-
-
|
55
|
-
-
|
56
|
-
-
|
57
|
-
-
|
58
|
-
-
|
59
|
-
-
|
60
|
-
-
|
61
|
-
|
62
|
-
-
|
63
|
-
-
|
64
|
-
-
|
65
|
-
-
|
66
|
-
-
|
67
|
-
-
|
68
|
-
-
|
69
|
-
-
|
70
|
-
-
|
71
|
-
-
|
72
|
-
-
|
73
|
-
-
|
74
|
-
-
|
75
|
-
-
|
76
|
-
-
|
77
|
-
-
|
78
|
-
-
|
79
|
-
-
|
80
|
-
-
|
81
|
-
-
|
82
|
-
-
|
83
|
-
-
|
84
|
-
-
|
85
|
-
-
|
86
|
-
-
|
87
|
-
-
|
88
|
-
-
|
89
|
-
- examples/
|
90
|
-
- examples/
|
91
|
-
- examples/
|
92
|
-
- examples/
|
93
|
-
- examples/
|
94
|
-
- examples/
|
95
|
-
- examples/
|
96
|
-
- examples/
|
97
|
-
- examples/
|
98
|
-
- examples/
|
99
|
-
- examples/
|
100
|
-
- examples/
|
101
|
-
- examples/
|
102
|
-
- examples/
|
103
|
-
- examples/
|
104
|
-
- examples/
|
105
|
-
- examples/
|
106
|
-
- examples/
|
107
|
-
- examples/
|
108
|
-
-
|
109
|
-
-
|
110
|
-
-
|
111
|
-
-
|
112
|
-
-
|
113
|
-
-
|
114
|
-
-
|
115
|
-
-
|
116
|
-
-
|
117
|
-
-
|
118
|
-
-
|
119
|
-
-
|
120
|
-
-
|
121
|
-
-
|
122
|
-
-
|
123
|
-
-
|
124
|
-
-
|
125
|
-
-
|
126
|
-
-
|
127
|
-
-
|
128
|
-
-
|
129
|
-
-
|
130
|
-
-
|
131
|
-
-
|
132
|
-
-
|
133
|
-
-
|
134
|
-
-
|
135
|
-
-
|
136
|
-
-
|
137
|
-
-
|
138
|
-
-
|
139
|
-
-
|
140
|
-
-
|
141
|
-
-
|
142
|
-
-
|
143
|
-
-
|
144
|
-
-
|
145
|
-
-
|
46
|
+
|
47
|
+
extra_rdoc_files:
|
48
|
+
- README.textile
|
49
|
+
- docs/08Migration.textile
|
50
|
+
- docs/Bindings.textile
|
51
|
+
- docs/ConnectingToTheBroker.textile
|
52
|
+
- docs/DocumentationGuidesIndex.textile
|
53
|
+
- docs/Durability.textile
|
54
|
+
- docs/ErrorHandling.textile
|
55
|
+
- docs/Exchanges.textile
|
56
|
+
- docs/GettingStarted.textile
|
57
|
+
- docs/Queues.textile
|
58
|
+
- docs/RabbitMQVersions.textile
|
59
|
+
- docs/Routing.textile
|
60
|
+
- docs/TLS.textile
|
61
|
+
- docs/VendorSpecificExtensions.textile
|
62
|
+
files:
|
63
|
+
- .gitignore
|
64
|
+
- .rspec
|
65
|
+
- .travis.yml
|
66
|
+
- .yardopts
|
67
|
+
- CHANGELOG
|
68
|
+
- CONTRIBUTORS
|
69
|
+
- Gemfile
|
70
|
+
- README.textile
|
71
|
+
- Rakefile
|
72
|
+
- amqp.gemspec
|
73
|
+
- bin/cleanify.rb
|
74
|
+
- bin/irb
|
75
|
+
- bin/jenkins.sh
|
76
|
+
- bin/set_test_suite_realms_up.sh
|
77
|
+
- docs/08Migration.textile
|
78
|
+
- docs/Bindings.textile
|
79
|
+
- docs/ConnectingToTheBroker.textile
|
80
|
+
- docs/DocumentationGuidesIndex.textile
|
81
|
+
- docs/Durability.textile
|
82
|
+
- docs/ErrorHandling.textile
|
83
|
+
- docs/Exchanges.textile
|
84
|
+
- docs/GettingStarted.textile
|
85
|
+
- docs/Queues.textile
|
86
|
+
- docs/RabbitMQVersions.textile
|
87
|
+
- docs/Routing.textile
|
88
|
+
- docs/TLS.textile
|
89
|
+
- docs/VendorSpecificExtensions.textile
|
90
|
+
- examples/channels/open_channel_without_assignment.rb
|
91
|
+
- examples/channels/prefetch_as_constructor_argument.rb
|
92
|
+
- examples/channels/qos_aka_prefetch.rb
|
93
|
+
- examples/channels/qos_aka_prefetch_without_callback.rb
|
94
|
+
- examples/error_handling/channel_level_exception.rb
|
95
|
+
- examples/error_handling/channel_level_exception_with_multiple_channels_involved.rb
|
96
|
+
- examples/error_handling/connection_loss_handler.rb
|
97
|
+
- examples/error_handling/global_channel_level_exception_handler.rb
|
98
|
+
- examples/error_handling/handling_authentication_failure_with_a_callback.rb
|
99
|
+
- examples/error_handling/tcp_connection_failure_handling_with_a_rescue_block.rb
|
100
|
+
- examples/error_handling/tcp_connection_failure_with_a_callback.rb
|
101
|
+
- examples/exchanges/declare_an_exchange_without_assignment.rb
|
102
|
+
- examples/extensions/rabbitmq/per_queue_message_ttl.rb
|
103
|
+
- examples/extensions/rabbitmq/publisher_confirmations_with_transient_messages.rb
|
104
|
+
- examples/guides/getting_started/01_hello_world.rb
|
105
|
+
- examples/guides/getting_started/02_hello_world_dslified.rb
|
106
|
+
- examples/guides/getting_started/03_babblr.rb
|
107
|
+
- examples/guides/getting_started/04_weathr.rb
|
108
|
+
- examples/hello_world.rb
|
109
|
+
- examples/hello_world_with_eventmachine_in_a_separate_thread.rb
|
110
|
+
- examples/legacy/ack.rb
|
111
|
+
- examples/legacy/callbacks.rb
|
112
|
+
- examples/legacy/clock.rb
|
113
|
+
- examples/legacy/hashtable.rb
|
114
|
+
- examples/legacy/logger.rb
|
115
|
+
- examples/legacy/multiclock.rb
|
116
|
+
- examples/legacy/pingpong.rb
|
117
|
+
- examples/legacy/primes-simple.rb
|
118
|
+
- examples/legacy/primes.rb
|
119
|
+
- examples/legacy/stocks.rb
|
120
|
+
- examples/queues/automatic_binding_for_default_direct_exchange.rb
|
121
|
+
- examples/queues/basic_get.rb
|
122
|
+
- examples/queues/declare_a_queue_without_assignment.rb
|
123
|
+
- examples/queues/declare_and_bind_a_server_named_queue.rb
|
124
|
+
- examples/queues/queue_status.rb
|
125
|
+
- examples/real-world/task-queue/README.textile
|
126
|
+
- examples/real-world/task-queue/consumer.rb
|
127
|
+
- examples/real-world/task-queue/producer.rb
|
128
|
+
- examples/routing/pubsub.rb
|
129
|
+
- examples/routing/weather_updates.rb
|
130
|
+
- examples/tls_certificates/client/cert.pem
|
131
|
+
- examples/tls_certificates/client/key.pem
|
132
|
+
- examples/tls_certificates/client/keycert.p12
|
133
|
+
- examples/tls_certificates/client/req.pem
|
134
|
+
- examples/tls_certificates/server/cert.pem
|
135
|
+
- examples/tls_certificates/server/key.pem
|
136
|
+
- examples/tls_certificates/server/keycert.p12
|
137
|
+
- examples/tls_certificates/server/req.pem
|
138
|
+
- examples/tls_certificates/testca/cacert.cer
|
139
|
+
- examples/tls_certificates/testca/cacert.pem
|
140
|
+
- examples/tls_certificates/testca/certs/01.pem
|
141
|
+
- examples/tls_certificates/testca/certs/02.pem
|
142
|
+
- examples/tls_certificates/testca/index.txt
|
143
|
+
- examples/tls_certificates/testca/index.txt.attr
|
144
|
+
- examples/tls_certificates/testca/index.txt.attr.old
|
145
|
+
- examples/tls_certificates/testca/index.txt.old
|
146
|
+
- examples/tls_certificates/testca/openssl.cnf
|
147
|
+
- examples/tls_certificates/testca/private/cakey.pem
|
148
|
+
- examples/tls_certificates/testca/serial
|
149
|
+
- examples/tls_certificates/testca/serial.old
|
150
|
+
- lib/amqp.rb
|
151
|
+
- lib/amqp/channel.rb
|
152
|
+
- lib/amqp/client.rb
|
153
|
+
- lib/amqp/connection.rb
|
154
|
+
- lib/amqp/deprecated/fork.rb
|
155
|
+
- lib/amqp/deprecated/logger.rb
|
156
|
+
- lib/amqp/deprecated/mq.rb
|
157
|
+
- lib/amqp/deprecated/rpc.rb
|
158
|
+
- lib/amqp/exceptions.rb
|
159
|
+
- lib/amqp/exchange.rb
|
160
|
+
- lib/amqp/ext/em.rb
|
161
|
+
- lib/amqp/ext/emfork.rb
|
162
|
+
- lib/amqp/extensions/rabbitmq.rb
|
163
|
+
- lib/amqp/header.rb
|
164
|
+
- lib/amqp/logger.rb
|
165
|
+
- lib/amqp/queue.rb
|
166
|
+
- lib/amqp/rpc.rb
|
167
|
+
- lib/amqp/session.rb
|
168
|
+
- lib/amqp/version.rb
|
169
|
+
- lib/mq.rb
|
170
|
+
- lib/mq/logger.rb
|
171
|
+
- lib/mq/rpc.rb
|
172
|
+
- spec/integration/authentication_spec.rb
|
173
|
+
- spec/integration/automatic_binding_for_default_direct_exchange_spec.rb
|
174
|
+
- spec/integration/basic_get_spec.rb
|
175
|
+
- spec/integration/channel_close_spec.rb
|
176
|
+
- spec/integration/channel_level_exception_with_multiple_channels_spec.rb
|
177
|
+
- spec/integration/declare_and_immediately_bind_a_server_named_queue_spec.rb
|
178
|
+
- spec/integration/exchange_declaration_spec.rb
|
179
|
+
- spec/integration/extensions/basic_return_spec.rb
|
180
|
+
- spec/integration/queue_declaration_spec.rb
|
181
|
+
- spec/integration/queue_exclusivity_spec.rb
|
182
|
+
- spec/integration/queue_redeclaration_with_incompatible_attributes_spec.rb
|
183
|
+
- spec/integration/reply_queue_communication_spec.rb
|
184
|
+
- spec/integration/store_and_forward_spec.rb
|
185
|
+
- spec/integration/topic_subscription_spec.rb
|
186
|
+
- spec/integration/workload_distribution_spec.rb
|
187
|
+
- spec/spec_helper.rb
|
188
|
+
- spec/unit/amqp/basic_spec.rb
|
189
|
+
- spec/unit/amqp/connection_spec.rb
|
190
|
+
- tasks.rb
|
146
191
|
has_rdoc: true
|
147
192
|
homepage: http://github.com/ruby-amqp/amqp
|
148
193
|
licenses: []
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
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
|
160
|
-
0.8.0\e[0m] [API] AMQP::Header#ack now can acknowledge multiple deliveries\n[\e[32mVersion
|
161
|
-
0.8.0\e[0m] [API] AMQP::Exchange#delete now takes (an optional) block that is called
|
162
|
-
when exchange.delete-ok response arrives.\n[\e[32mVersion 0.8.0\e[0m] [API] AMQP::Header
|
163
|
-
now implements #to_hash\n[\e[32mVersion 0.8.0\e[0m] [API] AMQP::Queue#pop block
|
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"
|
180
|
-
rdoc_options:
|
181
|
-
- --include=examples --main README.textile
|
182
|
-
require_paths:
|
183
|
-
- lib
|
184
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
194
|
+
|
195
|
+
post_install_message:
|
196
|
+
rdoc_options:
|
197
|
+
- --include=examples --main README.textile
|
198
|
+
require_paths:
|
199
|
+
- lib
|
200
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
185
201
|
none: false
|
186
|
-
requirements:
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
202
|
+
requirements:
|
203
|
+
- - ">="
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: "0"
|
206
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
191
207
|
none: false
|
192
|
-
requirements:
|
193
|
-
|
194
|
-
|
195
|
-
|
208
|
+
requirements:
|
209
|
+
- - ">"
|
210
|
+
- !ruby/object:Gem::Version
|
211
|
+
version: 1.3.1
|
196
212
|
requirements: []
|
213
|
+
|
197
214
|
rubyforge_project: amqp
|
198
|
-
rubygems_version: 1.
|
215
|
+
rubygems_version: 1.5.1
|
199
216
|
signing_key:
|
200
217
|
specification_version: 3
|
201
218
|
summary: AMQP client implementation in Ruby/EventMachine.
|
202
219
|
test_files: []
|
220
|
+
|