amqp 0.5.1 → 0.5.2

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 CHANGED
@@ -59,4 +59,21 @@ Other AMQP resources:
59
59
  http://github.com/0x6e6562/as3-amqp
60
60
 
61
61
  RabbitMQ's protocol code generator:
62
- http://hg.rabbitmq.com/rabbitmq-codegen/
62
+ http://hg.rabbitmq.com/rabbitmq-codegen/
63
+
64
+ Jonahthan Conway's series on RabbitMQ and using it with Ruby/Merb:
65
+ http://jaikoo.com/2008/3/20/daemonize-rabbitmq
66
+ http://jaikoo.com/2008/3/14/oh-hai-rabbitmq
67
+ http://jaikoo.com/2008/2/29/friday-round-up-2008-02-29
68
+ http://jaikoo.com/2007/9/4/didn-t-you-get-the-memo
69
+
70
+ Messaging and distributed systems resources:
71
+
72
+ A Critique of the Remote Procedure Call Paradigm
73
+ http://www.cs.vu.nl/~ast/publications/euteco-1988.pdf
74
+
75
+ A Note on Distributed Computing
76
+ http://research.sun.com/techrep/1994/smli_tr-94-29.pdf
77
+
78
+ Convenience Over Correctness
79
+ http://steve.vinoski.net/pdf/IEEE-Convenience_Over_Correctness.pdf
@@ -3,6 +3,8 @@ module AMQP
3
3
 
4
4
  $:.unshift DIR
5
5
 
6
+ require 'ext/em'
7
+
6
8
  %w[ buffer spec protocol frame client ].each do |file|
7
9
  require "amqp/#{file}"
8
10
  end
@@ -1,5 +1,3 @@
1
- require 'rubygems'
2
- require 'eventmachine'
3
1
  require 'amqp/frame'
4
2
  require 'pp'
5
3
 
@@ -0,0 +1,50 @@
1
+ begin
2
+ require 'eventmachine'
3
+ rescue LoadError
4
+ require 'rubygems'
5
+ require 'eventmachine'
6
+ end
7
+
8
+ # copied from EM trunk, will be removed when 0.12.1 is released
9
+ if EM::VERSION < '0.12.1'
10
+
11
+ def EventMachine::run blk=nil, tail=nil, &block
12
+ @tails ||= []
13
+ tail and @tails.unshift(tail)
14
+
15
+ if reactor_running?
16
+ (b = blk || block) and b.call # next_tick(b)
17
+ else
18
+ @conns = {}
19
+ @acceptors = {}
20
+ @timers = {}
21
+ begin
22
+ @reactor_running = true
23
+ initialize_event_machine
24
+ (b = blk || block) and add_timer(0, b)
25
+ run_machine
26
+ ensure
27
+ release_machine
28
+ @reactor_running = false
29
+ end
30
+
31
+ until @tails.empty?
32
+ @tails.pop.call
33
+ end
34
+ end
35
+ end
36
+
37
+ def EventMachine::fork_reactor &block
38
+ Kernel.fork do
39
+ if self.reactor_running?
40
+ self.stop_event_loop
41
+ self.release_machine
42
+ self.instance_variable_set( '@reactor_running', false )
43
+ end
44
+ self.run block
45
+ end
46
+ end
47
+
48
+ end
49
+
50
+ require 'ext/emfork'
File without changes
@@ -1,5 +1,3 @@
1
- require 'emfork'
2
-
3
1
  unless defined?(BlankSlate)
4
2
  class BlankSlate < BasicObject; end if defined?(BasicObject)
5
3
 
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.5.1
4
+ version: 0.5.2
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: 2008-07-21 00:00:00 -07:00
12
+ date: 2008-07-22 00:00:00 -07: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.1
23
+ version: 0.12.0
24
24
  version:
25
25
  description: AMQP client implementation in Ruby/EventMachine
26
26
  email: amqp@tmm1.net
@@ -35,10 +35,7 @@ files:
35
35
  - examples/clock.rb
36
36
  - examples/hashtable.rb
37
37
  - examples/pingpong.rb
38
- - examples/primes-forked.rb
39
- - examples/primes-processes.rb
40
38
  - examples/primes-simple.rb
41
- - examples/primes-threaded.rb
42
39
  - examples/primes.rb
43
40
  - examples/simple.rb
44
41
  - examples/stocks.rb
@@ -48,7 +45,8 @@ files:
48
45
  - lib/amqp/protocol.rb
49
46
  - lib/amqp/spec.rb
50
47
  - lib/amqp.rb
51
- - lib/emfork.rb
48
+ - lib/ext/em.rb
49
+ - lib/ext/emfork.rb
52
50
  - lib/mq/exchange.rb
53
51
  - lib/mq/queue.rb
54
52
  - lib/mq/rpc.rb
@@ -1,63 +0,0 @@
1
- $:.unshift File.dirname(__FILE__) + '/../lib'
2
- require 'mq'
3
-
4
- MAX = 5000
5
-
6
- def EM.fork &blk
7
- raise if reactor_running?
8
-
9
- unless @forks
10
- at_exit{
11
- @forks.each{ |pid| Process.kill('KILL', pid) }
12
- }
13
- end
14
-
15
- (@forks ||= []) << Kernel.fork do
16
- EM.run(&blk)
17
- end
18
- end
19
-
20
- def log *args
21
- p args
22
- end
23
-
24
- # MQ.logging = true
25
-
26
- # worker
27
-
28
- workers = ARGV[0] ? (Integer(ARGV[0]) rescue 2) : 2
29
-
30
- workers.times do
31
- EM.fork{
32
- log "prime checker", Process.pid, :started
33
-
34
- class Fixnum
35
- def prime?
36
- ('1' * self) !~ /^1?$|^(11+?)\1+$/
37
- end
38
- end
39
-
40
- MQ.queue('prime checker').subscribe{ |info, num|
41
- log "prime checker #{Process.pid}", :prime?, num
42
- if Integer(num).prime?
43
- MQ.queue(info.reply_to).publish(num, :reply_to => Process.pid)
44
- end
45
- }
46
- }
47
- end
48
-
49
- # controller
50
-
51
- EM.run{
52
- MQ.queue('prime collector').subscribe{ |info, prime|
53
- log 'prime collector', :received, prime, :from, info.reply_to
54
- (@primes ||= []) << Integer(prime)
55
- EM.stop_event_loop if prime == '499'
56
- }
57
-
58
- MAX.times do |i|
59
- EM.next_tick do
60
- MQ.queue('prime checker').publish((i+1).to_s, :reply_to => 'prime collector')
61
- end
62
- end
63
- }
@@ -1,135 +0,0 @@
1
- $:.unshift File.dirname(__FILE__) + '/../lib'
2
- require 'mq'
3
-
4
- MAX = 500
5
-
6
- EM.run{
7
-
8
- def log *args
9
- p args
10
- end
11
-
12
- # MQ.logging = true
13
-
14
- if ARGV[0] == 'worker'
15
-
16
- log "prime checker #{Process.pid}", :started
17
-
18
- class Fixnum
19
- def prime?
20
- ('1' * self) !~ /^1?$|^(11+?)\1+$/
21
- end
22
- end
23
-
24
- MQ.queue('prime checker').subscribe{ |info, num|
25
- log "prime checker #{Process.pid}", :prime?, num
26
- if Integer(num).prime?
27
- MQ.queue(info.reply_to).publish(num, :reply_to => Process.pid)
28
- EM.stop_event_loop if num == (MAX-1).to_s
29
- end
30
- }
31
-
32
- elsif ARGV[0] == 'controller'
33
-
34
- MQ.queue('prime collector').subscribe{ |info, prime|
35
- log 'prime collector', :received, prime, :from, info.reply_to
36
- (@primes ||= []) << Integer(prime)
37
- }
38
-
39
- MAX.times do |i|
40
- EM.next_tick do
41
- MQ.queue('prime checker').publish((i+1).to_s, :reply_to => 'prime collector')
42
- end
43
- end
44
-
45
- else # run n workers and 1 controller as an example
46
-
47
- workers = ARGV[0] ? (Integer(ARGV[0]) rescue 2) : 2
48
-
49
- ([ :worker ] * workers + [ :controller ]).each do |type|
50
- log :spawning, "`ruby #{$0} #{type}`"
51
-
52
- EM.popen("ruby #{$0} #{type}") do |c|
53
- def c.receive_data data
54
- puts data
55
- end
56
-
57
- def c.unbind
58
- EM.stop_event_loop
59
- end
60
- end
61
- end
62
-
63
- end
64
- }
65
-
66
- __END__
67
-
68
- ["prime checker", :started, {:pid=>1958}]
69
- ["prime checker", :started, {:pid=>1957}]
70
- ["prime checker", :started, {:pid=>1956}]
71
- ["prime checker", :prime?, "1", {:pid=>1958}]
72
- ["prime checker", :prime?, "2", {:pid=>1957}]
73
- ["prime collector", :received, "2", {:from_pid=>"1957"}]
74
- ["prime checker", :prime?, "3", {:pid=>1956}]
75
- ["prime collector", :received, "3", {:from_pid=>"1956"}]
76
- ["prime checker", :prime?, "4", {:pid=>1958}]
77
- ["prime checker", :prime?, "5", {:pid=>1957}]
78
- ["prime collector", :received, "5", {:from_pid=>"1957"}]
79
- ["prime checker", :prime?, "6", {:pid=>1956}]
80
- ["prime checker", :prime?, "7", {:pid=>1958}]
81
- ["prime collector", :received, "7", {:from_pid=>"1958"}]
82
- ["prime checker", :prime?, "8", {:pid=>1957}]
83
- ["prime checker", :prime?, "9", {:pid=>1956}]
84
- ["prime checker", :prime?, "10", {:pid=>1958}]
85
- ["prime checker", :prime?, "11", {:pid=>1957}]
86
- ["prime collector", :received, "11", {:from_pid=>"1957"}]
87
- ["prime checker", :prime?, "12", {:pid=>1956}]
88
- ["prime checker", :prime?, "13", {:pid=>1958}]
89
- ["prime collector", :received, "13", {:from_pid=>"1958"}]
90
- ["prime checker", :prime?, "14", {:pid=>1957}]
91
- ["prime checker", :prime?, "15", {:pid=>1956}]
92
- ["prime checker", :prime?, "16", {:pid=>1958}]
93
- ["prime checker", :prime?, "17", {:pid=>1957}]
94
- ["prime collector", :received, "17", {:from_pid=>"1957"}]
95
- ["prime checker", :prime?, "18", {:pid=>1956}]
96
- ["prime checker", :prime?, "19", {:pid=>1958}]
97
- ["prime collector", :received, "19", {:from_pid=>"1958"}]
98
- ["prime checker", :prime?, "20", {:pid=>1957}]
99
- ["prime checker", :prime?, "21", {:pid=>1956}]
100
- ["prime checker", :prime?, "22", {:pid=>1958}]
101
- ["prime checker", :prime?, "23", {:pid=>1957}]
102
- ["prime collector", :received, "23", {:from_pid=>"1957"}]
103
- ["prime checker", :prime?, "24", {:pid=>1956}]
104
- ["prime checker", :prime?, "25", {:pid=>1958}]
105
- ["prime checker", :prime?, "26", {:pid=>1957}]
106
- ["prime checker", :prime?, "27", {:pid=>1956}]
107
- ["prime checker", :prime?, "28", {:pid=>1958}]
108
- ["prime checker", :prime?, "29", {:pid=>1957}]
109
- ["prime collector", :received, "29", {:from_pid=>"1957"}]
110
- ["prime checker", :prime?, "30", {:pid=>1956}]
111
- ["prime checker", :prime?, "31", {:pid=>1958}]
112
- ["prime collector", :received, "31", {:from_pid=>"1958"}]
113
- ["prime checker", :prime?, "32", {:pid=>1957}]
114
- ["prime checker", :prime?, "33", {:pid=>1956}]
115
- ["prime checker", :prime?, "34", {:pid=>1958}]
116
- ["prime checker", :prime?, "35", {:pid=>1957}]
117
- ["prime checker", :prime?, "36", {:pid=>1956}]
118
- ["prime checker", :prime?, "37", {:pid=>1958}]
119
- ["prime collector", :received, "37", {:from_pid=>"1958"}]
120
- ["prime checker", :prime?, "38", {:pid=>1957}]
121
- ["prime checker", :prime?, "39", {:pid=>1956}]
122
- ["prime checker", :prime?, "40", {:pid=>1958}]
123
- ["prime checker", :prime?, "41", {:pid=>1957}]
124
- ["prime collector", :received, "41", {:from_pid=>"1957"}]
125
- ["prime checker", :prime?, "42", {:pid=>1956}]
126
- ["prime checker", :prime?, "43", {:pid=>1958}]
127
- ["prime collector", :received, "43", {:from_pid=>"1958"}]
128
- ["prime checker", :prime?, "44", {:pid=>1957}]
129
- ["prime checker", :prime?, "45", {:pid=>1956}]
130
- ["prime checker", :prime?, "46", {:pid=>1958}]
131
- ["prime checker", :prime?, "47", {:pid=>1957}]
132
- ["prime collector", :received, "47", {:from_pid=>"1957"}]
133
- ["prime checker", :prime?, "48", {:pid=>1956}]
134
- ["prime checker", :prime?, "49", {:pid=>1958}]
135
- ["prime checker", :prime?, "50", {:pid=>1957}]
@@ -1,49 +0,0 @@
1
- $:.unshift File.dirname(__FILE__) + '/../lib'
2
- require 'mq'
3
-
4
- MAX = 500
5
-
6
- def log *args
7
- p args
8
- end
9
-
10
- # MQ.logging = true
11
-
12
- EM.run{
13
-
14
- # worker
15
-
16
- log "prime checker", Process.pid, :started
17
-
18
- class Fixnum
19
- def prime?
20
- ('1' * self) !~ /^1?$|^(11+?)\1+$/
21
- end
22
- end
23
-
24
- MQ.queue('prime checker').subscribe{ |info, num|
25
- EM.defer(proc{
26
-
27
- log "prime checker #{Process.pid}-#{Thread.current.object_id}", :prime?, num
28
- if Integer(num).prime?
29
- MQ.queue(info.reply_to).publish(num, :reply_to => "#{Process.pid}-#{Thread.current.object_id}")
30
- EM.stop_event_loop if num == '499'
31
- end
32
-
33
- })
34
- }
35
-
36
- # controller
37
-
38
- MQ.queue('prime collector').subscribe{ |info, prime|
39
- log 'prime collector', :received, prime, :from, info.reply_to
40
- (@primes ||= []) << Integer(prime)
41
- }
42
-
43
- MAX.times do |i|
44
- EM.next_tick do
45
- MQ.queue('prime checker').publish((i+1).to_s, :reply_to => 'prime collector')
46
- end
47
- end
48
-
49
- }