amqp 0.5.9 → 0.6.0
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/README +4 -4
- data/examples/mq/logger.rb +12 -2
- data/examples/mq/simple-ack.rb +46 -0
- data/examples/mq/simple-get.rb +43 -0
- data/examples/mq/simple.rb +1 -1
- data/lib/amqp.rb +51 -13
- data/lib/amqp/buffer.rb +4 -4
- data/lib/amqp/client.rb +43 -8
- data/lib/amqp/frame.rb +2 -2
- data/lib/amqp/protocol.rb +25 -0
- data/lib/amqp/spec.rb +3 -2
- data/lib/ext/blankslate.rb +1 -1
- data/lib/ext/em.rb +3 -2
- data/lib/ext/emfork.rb +2 -0
- data/lib/mq.rb +585 -18
- data/lib/mq/exchange.rb +265 -3
- data/lib/mq/header.rb +33 -0
- data/lib/mq/logger.rb +15 -1
- data/lib/mq/queue.rb +363 -7
- data/lib/mq/rpc.rb +54 -0
- data/protocol/codegen.rb +1 -0
- metadata +10 -7
data/lib/mq/rpc.rb
CHANGED
@@ -1,5 +1,45 @@
|
|
1
1
|
class MQ
|
2
|
+
# Basic RPC (remote procedure call) facility.
|
3
|
+
#
|
4
|
+
# Needs more detail and explanation.
|
5
|
+
#
|
6
|
+
# EM.run do
|
7
|
+
# server = MQ.rpc('hash table node', Hash)
|
8
|
+
#
|
9
|
+
# client = MQ.rpc('hash table node')
|
10
|
+
# client[:now] = Time.now
|
11
|
+
# client[:one] = 1
|
12
|
+
#
|
13
|
+
# client.values do |res|
|
14
|
+
# p 'client', :values => res
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
# client.keys do |res|
|
18
|
+
# p 'client', :keys => res
|
19
|
+
# EM.stop_event_loop
|
20
|
+
# end
|
21
|
+
# end
|
22
|
+
#
|
2
23
|
class RPC < BlankSlate
|
24
|
+
# Takes a channel, queue and optional object.
|
25
|
+
#
|
26
|
+
# The optional object may be a class name, module name or object
|
27
|
+
# instance. When given a class or module name, the object is instantiated
|
28
|
+
# during this setup. The passed queue is automatically subscribed to so
|
29
|
+
# it passes all messages (and their arguments) to the object.
|
30
|
+
#
|
31
|
+
# Marshalling and unmarshalling the objects is handled internally. This
|
32
|
+
# marshalling is subject to the same restrictions as defined in the
|
33
|
+
# Marshal[http://ruby-doc.org/core/classes/Marshal.html] standard
|
34
|
+
# library. See that documentation for further reference.
|
35
|
+
#
|
36
|
+
# When the optional object is not passed, the returned rpc reference is
|
37
|
+
# used to send messages and arguments to the queue. See #method_missing
|
38
|
+
# which does all of the heavy lifting with the proxy. Some client
|
39
|
+
# elsewhere must call this method *with* the optional block so that
|
40
|
+
# there is a valid destination. Failure to do so will just enqueue
|
41
|
+
# marshalled messages that are never consumed.
|
42
|
+
#
|
3
43
|
def initialize mq, queue, obj = nil
|
4
44
|
@mq = mq
|
5
45
|
@mq.rpcs[queue] ||= self
|
@@ -34,6 +74,20 @@ class MQ
|
|
34
74
|
end
|
35
75
|
end
|
36
76
|
|
77
|
+
# Calling MQ.rpc(*args) returns a proxy object without any methods beyond
|
78
|
+
# those in Object. All calls to the proxy are handled by #method_missing which
|
79
|
+
# works to marshal and unmarshal all method calls and their arguments.
|
80
|
+
#
|
81
|
+
# EM.run do
|
82
|
+
# server = MQ.rpc('hash table node', Hash)
|
83
|
+
# client = MQ.rpc('hash table node')
|
84
|
+
#
|
85
|
+
# # calls #method_missing on #[] which marshals the method name and
|
86
|
+
# # arguments to publish them to the remote
|
87
|
+
# client[:now] = Time.now
|
88
|
+
# ....
|
89
|
+
# end
|
90
|
+
#
|
37
91
|
def method_missing meth, *args, &blk
|
38
92
|
# XXX use uuids instead
|
39
93
|
message_id = "random message id #{::Kernel.rand(999_999_999_999)}"
|
data/protocol/codegen.rb
CHANGED
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.
|
4
|
+
version: 0.6.0
|
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:
|
12
|
+
date: 2009-01-09 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 0.12.
|
23
|
+
version: 0.12.2
|
24
24
|
version:
|
25
25
|
description: AMQP client implementation in Ruby/EventMachine
|
26
26
|
email: amqp@tmm1.net
|
@@ -28,8 +28,8 @@ executables: []
|
|
28
28
|
|
29
29
|
extensions: []
|
30
30
|
|
31
|
-
extra_rdoc_files:
|
32
|
-
|
31
|
+
extra_rdoc_files:
|
32
|
+
- README
|
33
33
|
files:
|
34
34
|
- README
|
35
35
|
- examples/amqp/simple.rb
|
@@ -39,6 +39,8 @@ files:
|
|
39
39
|
- examples/mq/pingpong.rb
|
40
40
|
- examples/mq/primes-simple.rb
|
41
41
|
- examples/mq/primes.rb
|
42
|
+
- examples/mq/simple-ack.rb
|
43
|
+
- examples/mq/simple-get.rb
|
42
44
|
- examples/mq/simple.rb
|
43
45
|
- examples/mq/stocks.rb
|
44
46
|
- lib/amqp/buffer.rb
|
@@ -51,6 +53,7 @@ files:
|
|
51
53
|
- lib/ext/em.rb
|
52
54
|
- lib/ext/emfork.rb
|
53
55
|
- lib/mq/exchange.rb
|
56
|
+
- lib/mq/header.rb
|
54
57
|
- lib/mq/logger.rb
|
55
58
|
- lib/mq/queue.rb
|
56
59
|
- lib/mq/rpc.rb
|
@@ -59,7 +62,7 @@ files:
|
|
59
62
|
- protocol/codegen.rb
|
60
63
|
- protocol/doc.txt
|
61
64
|
- protocol/amqp-0.8.xml
|
62
|
-
has_rdoc:
|
65
|
+
has_rdoc: true
|
63
66
|
homepage: http://amqp.rubyforge.org/
|
64
67
|
post_install_message:
|
65
68
|
rdoc_options: []
|
@@ -81,7 +84,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
81
84
|
requirements: []
|
82
85
|
|
83
86
|
rubyforge_project:
|
84
|
-
rubygems_version: 1.
|
87
|
+
rubygems_version: 1.3.0
|
85
88
|
signing_key:
|
86
89
|
specification_version: 2
|
87
90
|
summary: AMQP client implementation in Ruby/EventMachine
|