amq-client 0.7.0.alpha25 → 0.7.0.alpha26
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +0 -1
- data/examples/coolio_adapter/basic_consume.rb +19 -15
- data/examples/coolio_adapter/channel_close.rb +4 -4
- data/examples/eventmachine_adapter/authentication/plain_password_with_default_role_credentials.rb +1 -1
- data/examples/eventmachine_adapter/basic_consume.rb +19 -17
- data/examples/eventmachine_adapter/basic_publish.rb +5 -5
- data/examples/eventmachine_adapter/channel_close.rb +4 -4
- data/examples/eventmachine_adapter/exchange_declare.rb +8 -8
- data/examples/eventmachine_adapter/kitchen_sink1.rb +10 -10
- data/lib/amq/client/adapter.rb +225 -38
- data/lib/amq/client/adapters/coolio.rb +72 -54
- data/lib/amq/client/adapters/event_machine.rb +67 -60
- data/lib/amq/client/callbacks.rb +18 -9
- data/lib/amq/client/channel.rb +44 -45
- data/lib/amq/client/entity.rb +4 -4
- data/lib/amq/client/exchange.rb +13 -21
- data/lib/amq/client/queue.rb +31 -31
- data/lib/amq/client/settings.rb +12 -1
- data/lib/amq/client/version.rb +1 -1
- data/spec/integration/coolio/connection_close_spec.rb +5 -5
- data/spec/integration/coolio/connection_start_spec.rb +9 -6
- data/spec/integration/eventmachine/channel_close_spec.rb +4 -4
- data/spec/integration/eventmachine/connection_close_spec.rb +5 -5
- data/spec/unit/client/entity_spec.rb +3 -8
- metadata +5 -6
- data/lib/amq/client/connection.rb +0 -246
data/lib/amq/client/settings.rb
CHANGED
@@ -10,7 +10,7 @@ module AMQ
|
|
10
10
|
#
|
11
11
|
# @see AMQ::Client::Settings.configure
|
12
12
|
def self.default
|
13
|
-
{
|
13
|
+
@default ||= {
|
14
14
|
# server
|
15
15
|
:host => "127.0.0.1",
|
16
16
|
:port => AMQ::Protocol::DEFAULT_PORT,
|
@@ -37,6 +37,17 @@ module AMQ
|
|
37
37
|
}
|
38
38
|
end
|
39
39
|
|
40
|
+
|
41
|
+
def self.client_properties
|
42
|
+
@client_properties ||= {
|
43
|
+
:platform => ::RUBY_DESCRIPTION,
|
44
|
+
:product => "AMQ Client",
|
45
|
+
:information => "http://github.com/ruby-amqp/amq-client",
|
46
|
+
:version => AMQ::Client::VERSION
|
47
|
+
}
|
48
|
+
end
|
49
|
+
|
50
|
+
|
40
51
|
# Merges given configuration parameters with defaults and returns
|
41
52
|
# the result.
|
42
53
|
#
|
data/lib/amq/client/version.rb
CHANGED
@@ -7,14 +7,14 @@ describe "AMQ::Client::CoolioClient", "Connection.Close", :nojruby => true do
|
|
7
7
|
|
8
8
|
it "should issue a callback and close connection" do
|
9
9
|
coolio do
|
10
|
-
AMQ::Client::CoolioClient.connect do |
|
11
|
-
@
|
12
|
-
|
13
|
-
|
10
|
+
AMQ::Client::CoolioClient.connect do |connection|
|
11
|
+
@connection = connection
|
12
|
+
connection.should be_opened
|
13
|
+
connection.disconnect do
|
14
14
|
done
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
18
|
-
@
|
18
|
+
@connection.should be_closed
|
19
19
|
end
|
20
20
|
end
|
@@ -34,12 +34,15 @@ describe "AMQ::Client::CoolioClient", "Connection.Start", :nojruby => true do
|
|
34
34
|
it "should raise an error" do
|
35
35
|
expect {
|
36
36
|
coolio do
|
37
|
-
|
38
|
-
|
37
|
+
begin
|
38
|
+
AMQ::Client::CoolioClient.connect(:port => 12938) { }
|
39
|
+
done
|
40
|
+
rescue Exception => e
|
41
|
+
done(0.5)
|
42
|
+
end
|
39
43
|
end
|
40
44
|
}.to raise_error(AMQ::Client::TCPConnectionFailed)
|
41
45
|
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
+
end # context
|
47
|
+
end # context
|
48
|
+
end # describe
|
@@ -7,14 +7,14 @@ describe AMQ::Client::EventMachineClient, "Channel.Close" do
|
|
7
7
|
|
8
8
|
it "should close the channel" do
|
9
9
|
@events = []
|
10
|
-
em_amqp_connect do |
|
10
|
+
em_amqp_connect do |connection|
|
11
11
|
@events << :connect
|
12
|
-
channel = AMQ::Client::Channel.new(
|
12
|
+
channel = AMQ::Client::Channel.new(connection, 1)
|
13
13
|
channel.open do
|
14
14
|
@events << :open
|
15
15
|
channel.close do
|
16
16
|
@events << :close
|
17
|
-
|
17
|
+
connection.disconnect do
|
18
18
|
@events << :disconnect
|
19
19
|
done
|
20
20
|
end
|
@@ -23,4 +23,4 @@ describe AMQ::Client::EventMachineClient, "Channel.Close" do
|
|
23
23
|
end
|
24
24
|
@events.should == [:connect, :open, :close, :disconnect]
|
25
25
|
end
|
26
|
-
end
|
26
|
+
end
|
@@ -7,14 +7,14 @@ describe AMQ::Client::EventMachineClient, "Connection.Close" do
|
|
7
7
|
|
8
8
|
it "should issue a callback and close connection" do
|
9
9
|
em do
|
10
|
-
AMQ::Client::EventMachineClient.connect do |
|
11
|
-
@
|
12
|
-
|
13
|
-
|
10
|
+
AMQ::Client::EventMachineClient.connect do |connection|
|
11
|
+
@connection = connection
|
12
|
+
connection.should be_opened
|
13
|
+
connection.disconnect do
|
14
14
|
done
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
18
|
-
@
|
18
|
+
@connection.should be_closed
|
19
19
|
end
|
20
20
|
end
|
@@ -53,15 +53,10 @@ describe AMQ::Client::Entity do
|
|
53
53
|
|
54
54
|
|
55
55
|
it "should pass arguments to the callback" do
|
56
|
-
|
56
|
+
f = Proc.new { |*args| args.first }
|
57
|
+
subject.define_callback :init, f
|
57
58
|
|
58
|
-
subject.exec_callback(:init, 1).should eql([
|
59
|
-
end
|
60
|
-
|
61
|
-
it "should pass block to the callback" do
|
62
|
-
subject.define_callback :init, Proc.new { |*args, &block| block.call }
|
63
|
-
|
64
|
-
subject.exec_callback(:init) { "block" }.should == ["block"]
|
59
|
+
subject.exec_callback(:init, 1).should eql([f])
|
65
60
|
end
|
66
61
|
end
|
67
62
|
end
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: amq-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: -
|
4
|
+
hash: -3702664424
|
5
5
|
prerelease: 6
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 7
|
9
9
|
- 0
|
10
10
|
- alpha
|
11
|
-
-
|
12
|
-
version: 0.7.0.
|
11
|
+
- 26
|
12
|
+
version: 0.7.0.alpha26
|
13
13
|
platform: ruby
|
14
14
|
authors:
|
15
15
|
- Jakub Stastny
|
@@ -20,7 +20,7 @@ autorequire:
|
|
20
20
|
bindir: bin
|
21
21
|
cert_chain: []
|
22
22
|
|
23
|
-
date: 2011-05-
|
23
|
+
date: 2011-05-22 00:00:00 Z
|
24
24
|
dependencies:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: eventmachine
|
@@ -154,7 +154,6 @@ files:
|
|
154
154
|
- lib/amq/client/adapters/event_machine.rb
|
155
155
|
- lib/amq/client/callbacks.rb
|
156
156
|
- lib/amq/client/channel.rb
|
157
|
-
- lib/amq/client/connection.rb
|
158
157
|
- lib/amq/client/entity.rb
|
159
158
|
- lib/amq/client/exceptions.rb
|
160
159
|
- lib/amq/client/exchange.rb
|
@@ -251,7 +250,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
251
250
|
requirements: []
|
252
251
|
|
253
252
|
rubyforge_project: amq-client
|
254
|
-
rubygems_version: 1.8.
|
253
|
+
rubygems_version: 1.8.3
|
255
254
|
signing_key:
|
256
255
|
specification_version: 3
|
257
256
|
summary: amq-client is a fully-featured, low-level AMQP 0.9.1 client
|
@@ -1,246 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require "amq/client"
|
4
|
-
require "amq/client/entity"
|
5
|
-
|
6
|
-
module AMQ
|
7
|
-
module Client
|
8
|
-
# AMQP connection object handles various connection lifecycle events
|
9
|
-
# (for example, Connection.Start-Ok, Connection.Tune-Ok and Connection.Close
|
10
|
-
# methods)
|
11
|
-
#
|
12
|
-
# AMQP connection has multiple channels accessible via {Connection#channels} reader.
|
13
|
-
class Connection
|
14
|
-
|
15
|
-
#
|
16
|
-
# Behaviors
|
17
|
-
#
|
18
|
-
|
19
|
-
include Entity
|
20
|
-
extend ProtocolMethodHandlers
|
21
|
-
|
22
|
-
#
|
23
|
-
# API
|
24
|
-
#
|
25
|
-
|
26
|
-
DEFAULT_CLIENT_PROPERTIES = {
|
27
|
-
:platform => ::RUBY_DESCRIPTION,
|
28
|
-
:product => "AMQ Client",
|
29
|
-
:information => "http://github.com/ruby-amqp/amq-client",
|
30
|
-
:version => AMQ::Client::VERSION
|
31
|
-
}
|
32
|
-
|
33
|
-
|
34
|
-
# Client capabilities
|
35
|
-
#
|
36
|
-
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.4.2.2.1)
|
37
|
-
attr_accessor :client_properties
|
38
|
-
|
39
|
-
# Server capabilities
|
40
|
-
#
|
41
|
-
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.4.2.1.3)
|
42
|
-
attr_reader :server_properties
|
43
|
-
|
44
|
-
# Authentication mechanism used.
|
45
|
-
#
|
46
|
-
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.4.2.2)
|
47
|
-
attr_reader :mechanism
|
48
|
-
|
49
|
-
# Security response data.
|
50
|
-
#
|
51
|
-
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Sections 1.4.2.2 and 1.4.2.4.1)
|
52
|
-
attr_reader :response
|
53
|
-
|
54
|
-
# The locale defines the language in which the server will send reply texts.
|
55
|
-
#
|
56
|
-
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.4.2.2)
|
57
|
-
attr_reader :locale
|
58
|
-
|
59
|
-
# Channels within this connection.
|
60
|
-
#
|
61
|
-
# @see http://bit.ly/hw2ELX AMQP 0.9.1 specification (Section 2.2.5)
|
62
|
-
attr_reader :channels
|
63
|
-
|
64
|
-
# Maximum channel number that the server permits this connection to use.
|
65
|
-
# Usable channel numbers are in the range 1..channel_max.
|
66
|
-
# Zero indicates no specified limit.
|
67
|
-
#
|
68
|
-
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Sections 1.4.2.5.1 and 1.4.2.6.1)
|
69
|
-
attr_accessor :channel_max
|
70
|
-
|
71
|
-
# Maximum frame size that the server permits this connection to use.
|
72
|
-
#
|
73
|
-
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Sections 1.4.2.5.2 and 1.4.2.6.2)
|
74
|
-
attr_accessor :frame_max
|
75
|
-
|
76
|
-
# The delay, in seconds, of the connection heartbeat that the server wants.
|
77
|
-
# Zero means the server does not want a heartbeat.
|
78
|
-
#
|
79
|
-
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.4.2.5.3)
|
80
|
-
attr_accessor :heartbeat_interval
|
81
|
-
|
82
|
-
attr_reader :known_hosts
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
# @api public
|
87
|
-
def initialize(client, mechanism, response, locale, client_properties = {})
|
88
|
-
@mechanism = mechanism
|
89
|
-
@response = response
|
90
|
-
@locale = locale
|
91
|
-
|
92
|
-
@channels = Hash.new
|
93
|
-
@client_properties = DEFAULT_CLIENT_PROPERTIES.merge(client_properties)
|
94
|
-
|
95
|
-
reset_state!
|
96
|
-
|
97
|
-
super(client)
|
98
|
-
|
99
|
-
@client.connections.push(self)
|
100
|
-
|
101
|
-
# Default errback.
|
102
|
-
# You might want to override it, otherwise it'll
|
103
|
-
# crash your program. It's the expected behaviour
|
104
|
-
self.define_callback(:close) { |exception| raise(exception) }
|
105
|
-
end
|
106
|
-
|
107
|
-
# @api public
|
108
|
-
def settings
|
109
|
-
@client.settings
|
110
|
-
end # settings
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
#
|
115
|
-
# Connection class methods
|
116
|
-
#
|
117
|
-
|
118
|
-
|
119
|
-
# Sends connection.open to the server.
|
120
|
-
#
|
121
|
-
# @api public
|
122
|
-
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.4.2.7)
|
123
|
-
def open(vhost = "/")
|
124
|
-
@client.send Protocol::Connection::Open.encode(vhost)
|
125
|
-
end
|
126
|
-
|
127
|
-
|
128
|
-
# Sends connection.close to the server.
|
129
|
-
#
|
130
|
-
# @api public
|
131
|
-
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.4.2.9)
|
132
|
-
def close(reply_code = 200, reply_text = "Goodbye", class_id = 0, method_id = 0)
|
133
|
-
@client.send Protocol::Connection::Close.encode(reply_code, reply_text, class_id, method_id)
|
134
|
-
closing!
|
135
|
-
end
|
136
|
-
|
137
|
-
# @api public
|
138
|
-
def reset_state!
|
139
|
-
end # reset_state!
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
#
|
144
|
-
# Implementation
|
145
|
-
#
|
146
|
-
|
147
|
-
|
148
|
-
# Handles Connection.Start.
|
149
|
-
#
|
150
|
-
# @api plugin
|
151
|
-
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.4.2.1.)
|
152
|
-
def start_ok(method)
|
153
|
-
@server_properties = method.server_properties
|
154
|
-
|
155
|
-
# It's not clear whether we should transition to :opening state here
|
156
|
-
# or in #open but in case authentication fails, it would be strange to have
|
157
|
-
# @status undefined. So lets do this. MK.
|
158
|
-
opening!
|
159
|
-
|
160
|
-
@client.send Protocol::Connection::StartOk.encode(@client_properties, @mechanism, @response, @locale)
|
161
|
-
end
|
162
|
-
|
163
|
-
|
164
|
-
# Handles Connection.Open-Ok.
|
165
|
-
#
|
166
|
-
# @api plugin
|
167
|
-
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.4.2.8.)
|
168
|
-
def handle_open_ok(method)
|
169
|
-
@known_hosts = method.known_hosts
|
170
|
-
|
171
|
-
opened!
|
172
|
-
@client.connection_successful if @client.respond_to?(:connection_successful)
|
173
|
-
end
|
174
|
-
|
175
|
-
# Handles Connection.Tune-Ok.
|
176
|
-
#
|
177
|
-
# @api plugin
|
178
|
-
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.4.2.6)
|
179
|
-
def handle_tune(method)
|
180
|
-
@channel_max = method.channel_max
|
181
|
-
@frame_max = method.frame_max
|
182
|
-
@heartbeat_interval = @client.heartbeat_interval || method.heartbeat
|
183
|
-
|
184
|
-
@client.send Protocol::Connection::TuneOk.encode(@channel_max, [settings[:frame_max], @frame_max].min, @heartbeat_interval)
|
185
|
-
end # handle_tune(method)
|
186
|
-
|
187
|
-
|
188
|
-
# Handles Connection.Close.
|
189
|
-
#
|
190
|
-
# @api plugin
|
191
|
-
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.5.2.9)
|
192
|
-
def handle_close(method)
|
193
|
-
self.handle_connection_interruption
|
194
|
-
|
195
|
-
closed!
|
196
|
-
# TODO: use proper exception class, provide protocol class (we know method.class_id and method.method_id) as well!
|
197
|
-
error = RuntimeError.new(method.reply_text)
|
198
|
-
self.error(error)
|
199
|
-
end
|
200
|
-
|
201
|
-
# Handles Connection.Close-Ok.
|
202
|
-
#
|
203
|
-
# @api plugin
|
204
|
-
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.4.2.10)
|
205
|
-
def handle_close_ok(method)
|
206
|
-
closed!
|
207
|
-
@client.disconnection_successful
|
208
|
-
end # handle_close_ok(method)
|
209
|
-
|
210
|
-
# @api plugin
|
211
|
-
def handle_connection_interruption
|
212
|
-
@channels.each { |n, c| c.handle_connection_interruption }
|
213
|
-
end # handle_connection_interruption
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
#
|
218
|
-
# Handlers
|
219
|
-
#
|
220
|
-
|
221
|
-
self.handle(Protocol::Connection::Start) do |client, frame|
|
222
|
-
client.connection.start_ok(frame.decode_payload)
|
223
|
-
end
|
224
|
-
|
225
|
-
self.handle(Protocol::Connection::Tune) do |client, frame|
|
226
|
-
client.connection.handle_tune(frame.decode_payload)
|
227
|
-
|
228
|
-
client.connection.open(client.settings[:vhost] || "/")
|
229
|
-
end
|
230
|
-
|
231
|
-
self.handle(Protocol::Connection::OpenOk) do |client, frame|
|
232
|
-
client.connection.handle_open_ok(frame.decode_payload)
|
233
|
-
end
|
234
|
-
|
235
|
-
self.handle(Protocol::Connection::Close) do |client, frame|
|
236
|
-
client.connection.handle_close(frame.decode_payload)
|
237
|
-
end
|
238
|
-
|
239
|
-
self.handle(Protocol::Connection::CloseOk) do |client, frame|
|
240
|
-
client.connection.handle_close_ok(frame.decode_payload)
|
241
|
-
end
|
242
|
-
|
243
|
-
|
244
|
-
end # Connection
|
245
|
-
end # Client
|
246
|
-
end # AMQ
|