amqp 0.5.1 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
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
- }