amqp 0.6.5 → 0.6.6
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/amqp.gemspec +4 -3
- data/lib/mq.rb +22 -1
- data/lib/mq/exchange.rb +9 -7
- data/lib/mq/queue.rb +27 -6
- metadata +5 -5
data/amqp.gemspec
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
spec = Gem::Specification.new do |s|
|
2
2
|
s.name = 'amqp'
|
3
|
-
s.version = '0.6.
|
4
|
-
s.date = '2009-
|
3
|
+
s.version = '0.6.6'
|
4
|
+
s.date = '2009-12-29'
|
5
5
|
s.summary = 'AMQP client implementation in Ruby/EventMachine'
|
6
6
|
s.email = "amqp@tmm1.net"
|
7
7
|
s.homepage = "http://amqp.rubyforge.org/"
|
8
|
-
s.
|
8
|
+
s.rubyforge_project = 'amqp'
|
9
|
+
s.description = "An implementation of the AMQP protocol in Ruby/EventMachine for writing clients to the RabbitMQ message broker"
|
9
10
|
s.has_rdoc = true
|
10
11
|
s.rdoc_options = '--include=examples'
|
11
12
|
|
data/lib/mq.rb
CHANGED
@@ -199,7 +199,7 @@ class MQ
|
|
199
199
|
end
|
200
200
|
|
201
201
|
when Protocol::Queue::DeclareOk
|
202
|
-
queues[ method.queue ].
|
202
|
+
queues[ method.queue ].receive_status method
|
203
203
|
|
204
204
|
when Protocol::Basic::Deliver, Protocol::Basic::GetOk
|
205
205
|
@method = method
|
@@ -230,6 +230,13 @@ class MQ
|
|
230
230
|
c.channels.delete @channel
|
231
231
|
c.close if c.channels.empty?
|
232
232
|
}
|
233
|
+
|
234
|
+
when Protocol::Basic::ConsumeOk
|
235
|
+
if @consumer = consumers[ method.consumer_tag ]
|
236
|
+
@consumer.confirm_subscribe
|
237
|
+
else
|
238
|
+
MQ.error "Basic.ConsumeOk for invalid consumer tag: #{method.consumer_tag}"
|
239
|
+
end
|
233
240
|
end
|
234
241
|
end
|
235
242
|
end
|
@@ -734,6 +741,20 @@ class MQ
|
|
734
741
|
|
735
742
|
def prefetch(size)
|
736
743
|
send Protocol::Basic::Qos.new(:prefetch_size => 0, :prefetch_count => size, :global => false)
|
744
|
+
self
|
745
|
+
end
|
746
|
+
|
747
|
+
# Asks the broker to redeliver all unacknowledged messages on this
|
748
|
+
# channel.
|
749
|
+
#
|
750
|
+
# * requeue (default false)
|
751
|
+
# If this parameter is false, the message will be redelivered to the original recipient.
|
752
|
+
# If this flag is true, the server will attempt to requeue the message, potentially then
|
753
|
+
# delivering it to an alternative subscriber.
|
754
|
+
#
|
755
|
+
def recover requeue = false
|
756
|
+
send Protocol::Basic::Recover.new(:requeue => requeue)
|
757
|
+
self
|
737
758
|
end
|
738
759
|
|
739
760
|
# Returns a hash of all the exchange proxy objects.
|
data/lib/mq/exchange.rb
CHANGED
@@ -194,11 +194,13 @@ class MQ
|
|
194
194
|
@mq.exchanges[@name = name] ||= self
|
195
195
|
@key = opts[:key]
|
196
196
|
|
197
|
-
|
198
|
-
@mq.
|
199
|
-
|
200
|
-
|
201
|
-
|
197
|
+
unless name == "amq.#{type}" or name == '' or opts[:no_declare]
|
198
|
+
@mq.callback{
|
199
|
+
@mq.send Protocol::Exchange::Declare.new({ :exchange => name,
|
200
|
+
:type => type,
|
201
|
+
:nowait => true }.merge(opts))
|
202
|
+
}
|
203
|
+
end
|
202
204
|
end
|
203
205
|
attr_reader :name, :type, :key
|
204
206
|
|
@@ -247,13 +249,13 @@ class MQ
|
|
247
249
|
out = []
|
248
250
|
|
249
251
|
out << Protocol::Basic::Publish.new({ :exchange => name,
|
250
|
-
:routing_key => opts
|
252
|
+
:routing_key => opts[:key] || @key }.merge(opts))
|
251
253
|
|
252
254
|
data = data.to_s
|
253
255
|
|
254
256
|
out << Protocol::Header.new(Protocol::Basic,
|
255
257
|
data.length, { :content_type => 'application/octet-stream',
|
256
|
-
:delivery_mode => (opts
|
258
|
+
:delivery_mode => (opts[:persistent] ? 2 : 1),
|
257
259
|
:priority => 0 }.merge(opts))
|
258
260
|
|
259
261
|
out << Frame::Body.new(data)
|
data/lib/mq/queue.rb
CHANGED
@@ -113,7 +113,7 @@ class MQ
|
|
113
113
|
@mq.callback{
|
114
114
|
@mq.send Protocol::Queue::Bind.new({ :queue => name,
|
115
115
|
:exchange => exchange,
|
116
|
-
:routing_key => opts
|
116
|
+
:routing_key => opts[:key],
|
117
117
|
:nowait => true }.merge(opts))
|
118
118
|
}
|
119
119
|
self
|
@@ -140,7 +140,7 @@ class MQ
|
|
140
140
|
@mq.callback{
|
141
141
|
@mq.send Protocol::Queue::Unbind.new({ :queue => name,
|
142
142
|
:exchange => exchange,
|
143
|
-
:routing_key => opts
|
143
|
+
:routing_key => opts[:key],
|
144
144
|
:nowait => true }.merge(opts))
|
145
145
|
}
|
146
146
|
self
|
@@ -175,6 +175,16 @@ class MQ
|
|
175
175
|
nil
|
176
176
|
end
|
177
177
|
|
178
|
+
# Purge all messages from the queue.
|
179
|
+
#
|
180
|
+
def purge opts = {}
|
181
|
+
@mq.callback{
|
182
|
+
@mq.send Protocol::Queue::Purge.new({ :queue => name,
|
183
|
+
:nowait => true }.merge(opts))
|
184
|
+
}
|
185
|
+
nil
|
186
|
+
end
|
187
|
+
|
178
188
|
# This method provides a direct access to the messages in a queue
|
179
189
|
# using a synchronous dialogue that is designed for specific types of
|
180
190
|
# application where synchronous functionality is more important than
|
@@ -240,7 +250,7 @@ class MQ
|
|
240
250
|
q.push(self)
|
241
251
|
@mq.send Protocol::Basic::Get.new({ :queue => name,
|
242
252
|
:consumer_tag => name,
|
243
|
-
:no_ack => !opts
|
253
|
+
:no_ack => !opts[:ack],
|
244
254
|
:nowait => true }.merge(opts))
|
245
255
|
}
|
246
256
|
}
|
@@ -296,6 +306,12 @@ class MQ
|
|
296
306
|
# not wait for a reply method. If the server could not complete the
|
297
307
|
# method it will raise a channel or connection exception.
|
298
308
|
#
|
309
|
+
# * :confirm => proc (default nil)
|
310
|
+
# If set, this proc will be called when the server confirms subscription
|
311
|
+
# to the queue with a ConsumeOk message. Setting this option will
|
312
|
+
# automatically set :nowait => false. This is required for the server
|
313
|
+
# to send a confirmation.
|
314
|
+
#
|
299
315
|
def subscribe opts = {}, &blk
|
300
316
|
@consumer_tag = "#{name}-#{Kernel.rand(999_999_999_999)}"
|
301
317
|
@mq.consumers[@consumer_tag] = self
|
@@ -304,11 +320,12 @@ class MQ
|
|
304
320
|
|
305
321
|
@on_msg = blk
|
306
322
|
@on_msg_opts = opts
|
323
|
+
opts[:nowait] = false if (@on_confirm_subscribe = opts[:confirm])
|
307
324
|
|
308
325
|
@mq.callback{
|
309
326
|
@mq.send Protocol::Basic::Consume.new({ :queue => name,
|
310
327
|
:consumer_tag => @consumer_tag,
|
311
|
-
:no_ack => !opts
|
328
|
+
:no_ack => !opts[:ack],
|
312
329
|
:nowait => true }.merge(opts))
|
313
330
|
}
|
314
331
|
self
|
@@ -336,7 +353,6 @@ class MQ
|
|
336
353
|
# method it will raise a channel or connection exception.
|
337
354
|
#
|
338
355
|
def unsubscribe opts = {}, &blk
|
339
|
-
@on_msg = nil
|
340
356
|
@on_cancel = blk
|
341
357
|
@mq.callback{
|
342
358
|
@mq.send Protocol::Basic::Cancel.new({ :consumer_tag => @consumer_tag }.merge(opts))
|
@@ -391,7 +407,7 @@ class MQ
|
|
391
407
|
self
|
392
408
|
end
|
393
409
|
|
394
|
-
def
|
410
|
+
def receive_status declare_ok
|
395
411
|
if @on_status
|
396
412
|
m, c = declare_ok.message_count, declare_ok.consumer_count
|
397
413
|
@on_status.call *(@on_status.arity == 1 ? [m] : [m, c])
|
@@ -399,6 +415,11 @@ class MQ
|
|
399
415
|
end
|
400
416
|
end
|
401
417
|
|
418
|
+
def confirm_subscribe
|
419
|
+
@on_confirm_subscribe.call if @on_confirm_subscribe
|
420
|
+
@on_confirm_subscribe = nil
|
421
|
+
end
|
422
|
+
|
402
423
|
def cancelled
|
403
424
|
@on_cancel.call if @on_cancel
|
404
425
|
@on_cancel = @on_msg = nil
|
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.6.
|
4
|
+
version: 0.6.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aman Gupta
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-12-29 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -22,7 +22,7 @@ dependencies:
|
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: 0.12.4
|
24
24
|
version:
|
25
|
-
description: AMQP
|
25
|
+
description: An implementation of the AMQP protocol in Ruby/EventMachine for writing clients to the RabbitMQ message broker
|
26
26
|
email: amqp@tmm1.net
|
27
27
|
executables: []
|
28
28
|
|
@@ -114,8 +114,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
114
114
|
version:
|
115
115
|
requirements: []
|
116
116
|
|
117
|
-
rubyforge_project:
|
118
|
-
rubygems_version: 1.3.
|
117
|
+
rubyforge_project: amqp
|
118
|
+
rubygems_version: 1.3.5
|
119
119
|
signing_key:
|
120
120
|
specification_version: 3
|
121
121
|
summary: AMQP client implementation in Ruby/EventMachine
|