amq-client 0.7.0.alpha27 → 0.7.0.alpha28
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/.travis.yml +1 -0
- data/examples/coolio_adapter/basic_consume_with_acknowledgements.rb +3 -3
- data/examples/coolio_adapter/example_helper.rb +1 -1
- data/examples/eventmachine_adapter/basic_consume_with_acknowledgements.rb +1 -1
- data/examples/eventmachine_adapter/example_helper.rb +1 -1
- data/lib/amq/client/adapter.rb +50 -38
- data/lib/amq/client/adapters/coolio.rb +1 -1
- data/lib/amq/client/adapters/event_machine.rb +16 -1
- data/lib/amq/client/channel.rb +10 -10
- data/lib/amq/client/exchange.rb +2 -2
- data/lib/amq/client/extensions/rabbitmq/basic.rb +1 -1
- data/lib/amq/client/extensions/rabbitmq/confirm.rb +1 -1
- data/lib/amq/client/queue.rb +10 -8
- data/lib/amq/client/version.rb +1 -1
- data/spec/integration/eventmachine/queue_declare_spec.rb +35 -0
- metadata +6 -5
data/.travis.yml
CHANGED
@@ -18,10 +18,10 @@ amq_client_example "Set a queue up for message delivery" do |client|
|
|
18
18
|
end
|
19
19
|
|
20
20
|
queue.consume do |consumer_tag|
|
21
|
-
queue.on_delivery do |header, payload
|
22
|
-
puts "Got a delivery: #{payload} (delivery tag: #{delivery_tag}), ack-ing..."
|
21
|
+
queue.on_delivery do |method, header, payload|
|
22
|
+
puts "Got a delivery: #{payload} (delivery tag: #{method.delivery_tag}), ack-ing..."
|
23
23
|
|
24
|
-
queue.acknowledge(delivery_tag)
|
24
|
+
queue.acknowledge(method.delivery_tag)
|
25
25
|
end
|
26
26
|
|
27
27
|
exchange = AMQ::Client::Exchange.new(client, channel, "amq.fanout", :fanout)
|
@@ -17,7 +17,7 @@ end
|
|
17
17
|
|
18
18
|
|
19
19
|
def amq_client_example(description = "", &block)
|
20
|
-
AMQ::Client::CoolioClient.connect(:port => 5672, :vhost => "
|
20
|
+
AMQ::Client::CoolioClient.connect(:port => 5672, :vhost => "amq_client_testbed") do |client|
|
21
21
|
begin
|
22
22
|
puts
|
23
23
|
puts
|
@@ -18,7 +18,7 @@ end
|
|
18
18
|
|
19
19
|
def amq_client_example(description = "", &block)
|
20
20
|
EM.run do
|
21
|
-
AMQ::Client::EventMachineClient.connect(:port => 5672, :vhost => "
|
21
|
+
AMQ::Client::EventMachineClient.connect(:port => 5672, :vhost => "amq_client_testbed", :frame_max => 65536, :heartbeat_interval => 1) do |client|
|
22
22
|
begin
|
23
23
|
puts
|
24
24
|
puts
|
data/lib/amq/client/adapter.rb
CHANGED
@@ -203,7 +203,7 @@ module AMQ
|
|
203
203
|
# ruby-amqp/amqp#66, MK.
|
204
204
|
if self.open?
|
205
205
|
closing!
|
206
|
-
self.
|
206
|
+
self.send_frame(Protocol::Connection::Close.encode(reply_code, reply_text, class_id, method_id))
|
207
207
|
elsif self.closing?
|
208
208
|
# no-op
|
209
209
|
else
|
@@ -224,7 +224,7 @@ module AMQ
|
|
224
224
|
# Sends frame to the peer, checking that connection is open.
|
225
225
|
#
|
226
226
|
# @raise [ConnectionClosedError]
|
227
|
-
def
|
227
|
+
def send_frame(frame)
|
228
228
|
if closed?
|
229
229
|
raise ConnectionClosedError.new(frame)
|
230
230
|
else
|
@@ -236,7 +236,7 @@ module AMQ
|
|
236
236
|
#
|
237
237
|
# @api public
|
238
238
|
def send_frameset(frames)
|
239
|
-
frames.each { |frame| self.
|
239
|
+
frames.each { |frame| self.send_frame(frame) }
|
240
240
|
end # send_frameset(frames)
|
241
241
|
|
242
242
|
|
@@ -252,6 +252,11 @@ module AMQ
|
|
252
252
|
end # heartbeat_interval
|
253
253
|
|
254
254
|
|
255
|
+
# vhost this connection uses. Default is "/", a historically estabilished convention
|
256
|
+
# of RabbitMQ and amqp gem.
|
257
|
+
#
|
258
|
+
# @return [String] vhost this connection uses
|
259
|
+
# @api public
|
255
260
|
def vhost
|
256
261
|
@settings.fetch(:vhost, "/")
|
257
262
|
end # vhost
|
@@ -285,6 +290,7 @@ module AMQ
|
|
285
290
|
end
|
286
291
|
|
287
292
|
# Sends connection preamble to the broker.
|
293
|
+
# @api plugin
|
288
294
|
def handshake
|
289
295
|
@authenticating = true
|
290
296
|
self.send_preamble
|
@@ -296,7 +302,7 @@ module AMQ
|
|
296
302
|
# @api plugin
|
297
303
|
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.4.2.7)
|
298
304
|
def open(vhost = "/")
|
299
|
-
self.
|
305
|
+
self.send_frame(Protocol::Connection::Open.encode(vhost))
|
300
306
|
end
|
301
307
|
|
302
308
|
# Resets connection state.
|
@@ -313,6 +319,10 @@ module AMQ
|
|
313
319
|
end # encode_credentials(username, password)
|
314
320
|
|
315
321
|
|
322
|
+
# Processes a single frame.
|
323
|
+
#
|
324
|
+
# @param [AMQ::Protocol::Frame] frame
|
325
|
+
# @api plugin
|
316
326
|
def receive_frame(frame)
|
317
327
|
@frames << frame
|
318
328
|
if frameset_complete?(@frames)
|
@@ -323,20 +333,19 @@ module AMQ
|
|
323
333
|
end
|
324
334
|
end
|
325
335
|
|
326
|
-
#
|
327
|
-
#
|
328
|
-
#
|
329
|
-
#
|
330
|
-
#
|
331
|
-
#
|
336
|
+
# Processes a frameset by finding and invoking a suitable handler.
|
337
|
+
# Heartbeat frames are treated in a special way: they simply update @last_server_heartbeat
|
338
|
+
# value.
|
339
|
+
#
|
340
|
+
# @param [Array<AMQ::Protocol::Frame>] frames
|
341
|
+
# @api plugin
|
332
342
|
def receive_frameset(frames)
|
333
343
|
frame = frames.first
|
334
344
|
|
335
345
|
if Protocol::HeartbeatFrame === frame
|
336
346
|
@last_server_heartbeat = Time.now
|
337
347
|
else
|
338
|
-
callable = AMQ::Client::HandlersRegistry.find(frame.method_class)
|
339
|
-
if callable
|
348
|
+
if callable = AMQ::Client::HandlersRegistry.find(frame.method_class)
|
340
349
|
callable.call(self, frames.first, frames[1..-1])
|
341
350
|
else
|
342
351
|
raise MissingHandlerError.new(frames.first)
|
@@ -344,24 +353,26 @@ module AMQ
|
|
344
353
|
end
|
345
354
|
end
|
346
355
|
|
356
|
+
# Sends a heartbeat frame if connection is open.
|
357
|
+
# @api plugin
|
347
358
|
def send_heartbeat
|
348
359
|
if tcp_connection_established?
|
349
360
|
if @last_server_heartbeat < (Time.now - (self.heartbeat_interval * 2))
|
350
361
|
logger.error "Reconnecting due to missing server heartbeats"
|
351
362
|
# TODO: reconnect
|
352
363
|
end
|
353
|
-
|
364
|
+
send_frame(Protocol::HeartbeatFrame)
|
354
365
|
end
|
355
366
|
end # send_heartbeat
|
356
367
|
|
357
368
|
|
358
369
|
|
359
|
-
# Handles
|
370
|
+
# Handles connection.start.
|
360
371
|
#
|
361
372
|
# @api plugin
|
362
373
|
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.4.2.1.)
|
363
|
-
def
|
364
|
-
@server_properties =
|
374
|
+
def handle_start(connection_start)
|
375
|
+
@server_properties = connection_start.server_properties
|
365
376
|
|
366
377
|
username = @settings[:user] || @settings[:username]
|
367
378
|
password = @settings[:pass] || @settings[:password]
|
@@ -371,44 +382,45 @@ module AMQ
|
|
371
382
|
# @status undefined. So lets do this. MK.
|
372
383
|
opening!
|
373
384
|
|
374
|
-
self.
|
385
|
+
self.send_frame(Protocol::Connection::StartOk.encode(@client_properties, @mechanism, self.encode_credentials(username, password), @locale))
|
375
386
|
end
|
376
387
|
|
377
388
|
|
389
|
+
# Handles Connection.Tune-Ok.
|
390
|
+
#
|
391
|
+
# @api plugin
|
392
|
+
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.4.2.6)
|
393
|
+
def handle_tune(tune_ok)
|
394
|
+
@channel_max = tune_ok.channel_max
|
395
|
+
@frame_max = tune_ok.frame_max
|
396
|
+
@heartbeat_interval = self.heartbeat_interval || tune_ok.heartbeat
|
397
|
+
|
398
|
+
self.send_frame(Protocol::Connection::TuneOk.encode(@channel_max, [settings[:frame_max], @frame_max].min, @heartbeat_interval))
|
399
|
+
end # handle_tune(method)
|
400
|
+
|
401
|
+
|
378
402
|
# Handles Connection.Open-Ok.
|
379
403
|
#
|
380
404
|
# @api plugin
|
381
405
|
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.4.2.8.)
|
382
|
-
def handle_open_ok(
|
383
|
-
@known_hosts =
|
406
|
+
def handle_open_ok(open_ok)
|
407
|
+
@known_hosts = open_ok.known_hosts
|
384
408
|
|
385
409
|
opened!
|
386
410
|
self.connection_successful if self.respond_to?(:connection_successful)
|
387
411
|
end
|
388
412
|
|
389
|
-
# Handles Connection.Tune-Ok.
|
390
|
-
#
|
391
|
-
# @api plugin
|
392
|
-
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.4.2.6)
|
393
|
-
def handle_tune(method)
|
394
|
-
@channel_max = method.channel_max
|
395
|
-
@frame_max = method.frame_max
|
396
|
-
@heartbeat_interval = self.heartbeat_interval || method.heartbeat
|
397
|
-
|
398
|
-
self.send Protocol::Connection::TuneOk.encode(@channel_max, [settings[:frame_max], @frame_max].min, @heartbeat_interval)
|
399
|
-
end # handle_tune(method)
|
400
|
-
|
401
413
|
|
402
414
|
# Handles connection.close. When broker detects a connection level exception, this method is called.
|
403
415
|
#
|
404
416
|
# @api plugin
|
405
417
|
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.5.2.9)
|
406
|
-
def handle_close(
|
418
|
+
def handle_close(conn_close)
|
407
419
|
self.handle_connection_interruption
|
408
420
|
|
409
421
|
closed!
|
410
|
-
# TODO: use proper exception class, provide protocol class (we know
|
411
|
-
error = RuntimeError.new(
|
422
|
+
# TODO: use proper exception class, provide protocol class (we know conn_close.class_id and conn_close.method_id) as well!
|
423
|
+
error = RuntimeError.new(conn_close.reply_text)
|
412
424
|
self.error(error)
|
413
425
|
end
|
414
426
|
|
@@ -417,10 +429,10 @@ module AMQ
|
|
417
429
|
#
|
418
430
|
# @api plugin
|
419
431
|
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.4.2.10)
|
420
|
-
def handle_close_ok(
|
432
|
+
def handle_close_ok(close_ok)
|
421
433
|
closed!
|
422
434
|
self.disconnection_successful
|
423
|
-
end # handle_close_ok(
|
435
|
+
end # handle_close_ok(close_ok)
|
424
436
|
|
425
437
|
# @api plugin
|
426
438
|
def handle_connection_interruption
|
@@ -439,9 +451,9 @@ module AMQ
|
|
439
451
|
# octet + short
|
440
452
|
offset = 3 # 1 + 2
|
441
453
|
# length
|
442
|
-
payload_length = @chunk_buffer[offset, 4].unpack(
|
454
|
+
payload_length = @chunk_buffer[offset, 4].unpack(AMQ::Protocol::PACK_UINT32).first
|
443
455
|
# 4 bytes for long payload length, 1 byte final octet
|
444
|
-
frame_length = offset +
|
456
|
+
frame_length = offset + payload_length + 5
|
445
457
|
if frame_length <= @chunk_buffer.size
|
446
458
|
@chunk_buffer.slice!(0, frame_length)
|
447
459
|
else
|
@@ -210,7 +210,7 @@ module AMQ
|
|
210
210
|
|
211
211
|
|
212
212
|
self.handle(Protocol::Connection::Start) do |connection, frame|
|
213
|
-
connection.
|
213
|
+
connection.handle_start(frame.decode_payload)
|
214
214
|
end
|
215
215
|
|
216
216
|
self.handle(Protocol::Connection::Tune) do |connection, frame|
|
@@ -19,6 +19,21 @@ module AMQ
|
|
19
19
|
# API
|
20
20
|
#
|
21
21
|
|
22
|
+
# Initiates connection to AMQP broker. If callback is given, runs it when (and if) AMQP connection
|
23
|
+
# succeeds.
|
24
|
+
#
|
25
|
+
# @option settings [String] :host ("127.0.0.1") Hostname AMQ broker runs on.
|
26
|
+
# @option settings [String] :port (5672) Port AMQ broker listens on.
|
27
|
+
# @option settings [String] :vhost ("/") Virtual host to use.
|
28
|
+
# @option settings [String] :user ("guest") Username to use for authentication.
|
29
|
+
# @option settings [String] :pass ("guest") Password to use for authentication.
|
30
|
+
# @option settings [String] :ssl (false) Should be use TLS (SSL) for connection?
|
31
|
+
# @option settings [String] :timeout (nil) Connection timeout.
|
32
|
+
# @option settings [String] :logging (false) Turns logging on or off.
|
33
|
+
# @option settings [String] :broker (nil) Broker name (use if you intend to use broker-specific features).
|
34
|
+
# @option settings [Fixnum] :frame_max (131072) Maximum frame size to use. If broker cannot support frames this large, broker's maximum value will be used instead.
|
35
|
+
#
|
36
|
+
# @params [Hash] settings
|
22
37
|
def self.connect(settings = {}, &block)
|
23
38
|
@settings = Settings.configure(settings)
|
24
39
|
|
@@ -316,7 +331,7 @@ module AMQ
|
|
316
331
|
|
317
332
|
|
318
333
|
self.handle(Protocol::Connection::Start) do |connection, frame|
|
319
|
-
connection.
|
334
|
+
connection.handle_start(frame.decode_payload)
|
320
335
|
end
|
321
336
|
|
322
337
|
self.handle(Protocol::Connection::Tune) do |connection, frame|
|
data/lib/amq/client/channel.rb
CHANGED
@@ -91,7 +91,7 @@ module AMQ
|
|
91
91
|
#
|
92
92
|
# @api public
|
93
93
|
def open(&block)
|
94
|
-
@connection.
|
94
|
+
@connection.send_frame(Protocol::Channel::Open.encode(@id, AMQ::Protocol::EMPTY_STRING))
|
95
95
|
@connection.channels[@id] = self
|
96
96
|
self.status = :opening
|
97
97
|
|
@@ -102,7 +102,7 @@ module AMQ
|
|
102
102
|
#
|
103
103
|
# @api public
|
104
104
|
def close(reply_code = 200, reply_text = DEFAULT_REPLY_TEXT, class_id = 0, method_id = 0, &block)
|
105
|
-
@connection.
|
105
|
+
@connection.send_frame(Protocol::Channel::Close.encode(@id, reply_code, reply_text, class_id, method_id))
|
106
106
|
|
107
107
|
self.redefine_callback :close, &block
|
108
108
|
end
|
@@ -113,7 +113,7 @@ module AMQ
|
|
113
113
|
# @api public
|
114
114
|
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.8.3.13.)
|
115
115
|
def acknowledge(delivery_tag, multiple = false)
|
116
|
-
@connection.
|
116
|
+
@connection.send_frame(Protocol::Basic::Ack.encode(self.id, delivery_tag, multiple))
|
117
117
|
|
118
118
|
self
|
119
119
|
end # acknowledge(delivery_tag, multiple = false)
|
@@ -123,7 +123,7 @@ module AMQ
|
|
123
123
|
# @api public
|
124
124
|
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.8.3.14.)
|
125
125
|
def reject(delivery_tag, requeue = true)
|
126
|
-
@connection.
|
126
|
+
@connection.send_frame(Protocol::Basic::Reject.encode(self.id, delivery_tag, requeue))
|
127
127
|
|
128
128
|
self
|
129
129
|
end # reject(delivery_tag, requeue = true)
|
@@ -134,7 +134,7 @@ module AMQ
|
|
134
134
|
# @note RabbitMQ as of 2.3.1 does not support prefetch_size.
|
135
135
|
# @api public
|
136
136
|
def qos(prefetch_size = 0, prefetch_count = 32, global = false, &block)
|
137
|
-
@connection.
|
137
|
+
@connection.send_frame(Protocol::Basic::Qos.encode(@id, prefetch_size, prefetch_count, global))
|
138
138
|
|
139
139
|
self.redefine_callback :qos, &block
|
140
140
|
self
|
@@ -149,7 +149,7 @@ module AMQ
|
|
149
149
|
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.8.3.16.)
|
150
150
|
# @api public
|
151
151
|
def recover(requeue = true, &block)
|
152
|
-
@connection.
|
152
|
+
@connection.send_frame(Protocol::Basic::Recover.encode(@id, requeue))
|
153
153
|
|
154
154
|
self.redefine_callback :recover, &block
|
155
155
|
self
|
@@ -166,7 +166,7 @@ module AMQ
|
|
166
166
|
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.5.2.3.)
|
167
167
|
# @api public
|
168
168
|
def flow(active = false, &block)
|
169
|
-
@connection.
|
169
|
+
@connection.send_frame(Protocol::Channel::Flow.encode(@id, active))
|
170
170
|
|
171
171
|
self.redefine_callback :flow, &block
|
172
172
|
self
|
@@ -178,7 +178,7 @@ module AMQ
|
|
178
178
|
#
|
179
179
|
# @api public
|
180
180
|
def tx_select(&block)
|
181
|
-
@connection.
|
181
|
+
@connection.send_frame(Protocol::Tx::Select.encode(@id))
|
182
182
|
|
183
183
|
self.redefine_callback :tx_select, &block
|
184
184
|
self
|
@@ -188,7 +188,7 @@ module AMQ
|
|
188
188
|
#
|
189
189
|
# @api public
|
190
190
|
def tx_commit(&block)
|
191
|
-
@connection.
|
191
|
+
@connection.send_frame(Protocol::Tx::Commit.encode(@id))
|
192
192
|
|
193
193
|
self.redefine_callback :tx_commit, &block
|
194
194
|
self
|
@@ -198,7 +198,7 @@ module AMQ
|
|
198
198
|
#
|
199
199
|
# @api public
|
200
200
|
def tx_rollback(&block)
|
201
|
-
@connection.
|
201
|
+
@connection.send_frame(Protocol::Tx::Rollback.encode(@id))
|
202
202
|
|
203
203
|
self.redefine_callback :tx_rollback, &block
|
204
204
|
self
|
data/lib/amq/client/exchange.rb
CHANGED
@@ -68,7 +68,7 @@ module AMQ
|
|
68
68
|
|
69
69
|
|
70
70
|
def declare(passive = false, durable = false, auto_delete = false, nowait = false, arguments = nil, &block)
|
71
|
-
@connection.
|
71
|
+
@connection.send_frame(Protocol::Exchange::Declare.encode(@channel.id, @name, @type.to_s, passive, durable, auto_delete, false, nowait, arguments))
|
72
72
|
|
73
73
|
unless nowait
|
74
74
|
self.define_callback(:declare, &block)
|
@@ -80,7 +80,7 @@ module AMQ
|
|
80
80
|
|
81
81
|
|
82
82
|
def delete(if_unused = false, nowait = false, &block)
|
83
|
-
@connection.
|
83
|
+
@connection.send_frame(Protocol::Exchange::Delete.encode(@channel.id, @name, if_unused, nowait))
|
84
84
|
|
85
85
|
unless nowait
|
86
86
|
self.define_callback(:delete, &block)
|
@@ -16,7 +16,7 @@ module AMQ
|
|
16
16
|
# @see http://www.rabbitmq.com/amqp-0-9-1-quickref.html#basic.nack
|
17
17
|
def reject(delivery_tag, requeue = true, multi = false)
|
18
18
|
if multi
|
19
|
-
@client.
|
19
|
+
@client.send_frame(Protocol::Basic::Nack.encode(self.id, delivery_tag, multi, requeue))
|
20
20
|
else
|
21
21
|
super(delivery_tag, requeue)
|
22
22
|
end
|
@@ -104,7 +104,7 @@ module AMQ
|
|
104
104
|
|
105
105
|
@uses_publisher_confirmations = true
|
106
106
|
self.redefine_callback(:confirm_select, &block)
|
107
|
-
@client.
|
107
|
+
@client.send_frame(Protocol::Confirm::Select.encode(@id, nowait))
|
108
108
|
|
109
109
|
self
|
110
110
|
end
|
data/lib/amq/client/queue.rb
CHANGED
@@ -36,6 +36,8 @@ module AMQ
|
|
36
36
|
# @param [String] Queue name. Please note that AMQP spec does not require brokers to support Unicode for queue names.
|
37
37
|
# @api public
|
38
38
|
def initialize(connection, channel, name = AMQ::Protocol::EMPTY_STRING)
|
39
|
+
raise ArgumentError.new("queue name must not be nil; if you want broker to generate queue name for you, pass an empty string") if name.nil?
|
40
|
+
|
39
41
|
super(connection)
|
40
42
|
|
41
43
|
@name = name
|
@@ -87,7 +89,7 @@ module AMQ
|
|
87
89
|
@auto_delete = auto_delete
|
88
90
|
|
89
91
|
nowait = true if !block && !@name.empty?
|
90
|
-
@connection.
|
92
|
+
@connection.send_frame(Protocol::Queue::Declare.encode(@channel.id, @name, passive, durable, exclusive, auto_delete, nowait, arguments))
|
91
93
|
|
92
94
|
if !nowait
|
93
95
|
self.append_callback(:declare, &block)
|
@@ -108,7 +110,7 @@ module AMQ
|
|
108
110
|
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.7.2.9.)
|
109
111
|
def delete(if_unused = false, if_empty = false, nowait = false, &block)
|
110
112
|
nowait = true unless block
|
111
|
-
@connection.
|
113
|
+
@connection.send_frame(Protocol::Queue::Delete.encode(@channel.id, @name, if_unused, if_empty, nowait))
|
112
114
|
|
113
115
|
if !nowait
|
114
116
|
self.append_callback(:delete, &block)
|
@@ -134,7 +136,7 @@ module AMQ
|
|
134
136
|
exchange
|
135
137
|
end
|
136
138
|
|
137
|
-
@connection.
|
139
|
+
@connection.send_frame(Protocol::Queue::Bind.encode(@channel.id, @name, exchange_name, routing_key, nowait, arguments))
|
138
140
|
|
139
141
|
if !nowait
|
140
142
|
self.append_callback(:bind, &block)
|
@@ -159,7 +161,7 @@ module AMQ
|
|
159
161
|
exchange
|
160
162
|
end
|
161
163
|
|
162
|
-
@connection.
|
164
|
+
@connection.send_frame(Protocol::Queue::Unbind.encode(@channel.id, @name, exchange_name, routing_key, arguments))
|
163
165
|
|
164
166
|
self.append_callback(:unbind, &block)
|
165
167
|
# TODO: handle channel & connection-level exceptions
|
@@ -179,7 +181,7 @@ module AMQ
|
|
179
181
|
|
180
182
|
nowait = true unless block
|
181
183
|
@consumer_tag = generate_consumer_tag(name)
|
182
|
-
@connection.
|
184
|
+
@connection.send_frame(Protocol::Basic::Consume.encode(@channel.id, @name, @consumer_tag, no_local, no_ack, exclusive, nowait, arguments))
|
183
185
|
|
184
186
|
@channel.consumers[@consumer_tag] = self
|
185
187
|
|
@@ -220,7 +222,7 @@ module AMQ
|
|
220
222
|
# @api public
|
221
223
|
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.8.3.10.)
|
222
224
|
def get(no_ack = false, &block)
|
223
|
-
@connection.
|
225
|
+
@connection.send_frame(Protocol::Basic::Get.encode(@channel.id, @name, no_ack))
|
224
226
|
|
225
227
|
# most people only want one callback per #get call. Consider the following example:
|
226
228
|
#
|
@@ -241,7 +243,7 @@ module AMQ
|
|
241
243
|
def cancel(nowait = false, &block)
|
242
244
|
raise "There is no consumer tag for this queue. This usually means that you are trying to unsubscribe a queue that never was subscribed for messages in the first place." if @consumer_tag.nil?
|
243
245
|
|
244
|
-
@connection.
|
246
|
+
@connection.send_frame(Protocol::Basic::Cancel.encode(@channel.id, @consumer_tag, nowait))
|
245
247
|
@consumer_tag = nil
|
246
248
|
self.clear_callbacks(:delivery)
|
247
249
|
self.clear_callbacks(:consume)
|
@@ -261,7 +263,7 @@ module AMQ
|
|
261
263
|
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.7.2.7.)
|
262
264
|
def purge(nowait = false, &block)
|
263
265
|
nowait = true unless block
|
264
|
-
@connection.
|
266
|
+
@connection.send_frame(Protocol::Queue::Purge.encode(@channel.id, @name, nowait))
|
265
267
|
|
266
268
|
if !nowait
|
267
269
|
self.redefine_callback(:purge, &block)
|
data/lib/amq/client/version.rb
CHANGED
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'integration/eventmachine/spec_helper'
|
3
|
+
|
4
|
+
describe AMQ::Client::EventMachineClient, "queue.declare" do
|
5
|
+
|
6
|
+
#
|
7
|
+
# Environment
|
8
|
+
#
|
9
|
+
|
10
|
+
include EventedSpec::SpecHelper
|
11
|
+
default_timeout 1
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
#
|
16
|
+
# Examples
|
17
|
+
#
|
18
|
+
|
19
|
+
context "when queue name is nil" do
|
20
|
+
it "raises ArgumentError" do
|
21
|
+
em_amqp_connect do |connection|
|
22
|
+
ch = AMQ::Client::Channel.new(connection, 1)
|
23
|
+
ch.open do |ch|
|
24
|
+
begin
|
25
|
+
AMQ::Client::Queue.new(connection, ch, nil)
|
26
|
+
rescue ArgumentError => ae
|
27
|
+
ae.message.should =~ /queue name must not be nil/
|
28
|
+
|
29
|
+
done
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end # context
|
35
|
+
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: -3702664428
|
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
|
+
- 28
|
12
|
+
version: 0.7.0.alpha28
|
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-26 00:00:00 Z
|
24
24
|
dependencies:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: eventmachine
|
@@ -201,6 +201,7 @@ files:
|
|
201
201
|
- spec/integration/eventmachine/connection_close_spec.rb
|
202
202
|
- spec/integration/eventmachine/connection_start_spec.rb
|
203
203
|
- spec/integration/eventmachine/exchange_declare_spec.rb
|
204
|
+
- spec/integration/eventmachine/queue_declare_spec.rb
|
204
205
|
- spec/integration/eventmachine/regressions/amqp_gem_issue66_spec.rb
|
205
206
|
- spec/integration/eventmachine/spec_helper.rb
|
206
207
|
- spec/integration/eventmachine/tx_commit_spec.rb
|
@@ -254,7 +255,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
254
255
|
requirements: []
|
255
256
|
|
256
257
|
rubyforge_project: amq-client
|
257
|
-
rubygems_version: 1.8.
|
258
|
+
rubygems_version: 1.8.4
|
258
259
|
signing_key:
|
259
260
|
specification_version: 3
|
260
261
|
summary: amq-client is a fully-featured, low-level AMQP 0.9.1 client
|