amqpop 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,6 +2,7 @@ module Amqpop
2
2
 
3
3
  class << self
4
4
  attr_accessor :options
5
+ attr_accessor :connection
5
6
  end
6
7
 
7
8
  self.options = nil
@@ -32,7 +32,22 @@ module Amqpop
32
32
  vputs "Running #{AMQP::VERSION} version of the AMQP gem."
33
33
  vputs "Connecting to AMQP broker on #{connection_params[:host]} as #{connection_params[:username]}."
34
34
  AMQP.connect(connection_params) do |connection|
35
- AMQP::Channel.new(connection) do |channel|
35
+ Amqpop.connection = connection
36
+ connection.on_tcp_connection_loss do |cl, settings|
37
+ eputs "Connection to AMQP broker lost!"
38
+ eputs "Waiting 2 seconds to attempt to connect..."
39
+ cl.reconnect(true, 2)
40
+ end
41
+
42
+ connection.on_open do
43
+ vputs "Connection established"
44
+ end
45
+
46
+ connection.on_recovery do
47
+ eputs "Connection reestablished"
48
+ end
49
+
50
+ AMQP::Channel.new(connection, :auto_recovery => true) do |channel|
36
51
 
37
52
  channel.on_error do |ch, close|
38
53
  eputs "ERROR: Channel-level exception: #{close.reply_text}, #{close.inspect}"
@@ -76,6 +91,8 @@ module Amqpop
76
91
  private
77
92
 
78
93
  def shutdown
94
+ eputs "Shutting down"
95
+ Amqpop.connection.disconnect unless Amqpop.connection.nil?
79
96
  EventMachine.stop
80
97
  @lock.release!
81
98
  exit 0
@@ -140,10 +157,17 @@ module Amqpop
140
157
  if Amqpop.temp_queue?
141
158
  channel.queue('', :auto_delete => true, :durable => false, :exclusive => true)
142
159
  else
143
- channel.queue(options[:queue_name], :auto_delete => false, :durable => true)
160
+
161
+ channel.queue(options[:queue_name], :auto_delete => false, :durable => true, :arguments => get_queue_args)
144
162
  end
145
163
  end
146
164
 
165
+ def get_queue_args
166
+ arguments = {}
167
+ arguments['x-ha-policy'] = 'all' if options[:mirror]
168
+ arguments
169
+ end
170
+
147
171
  def eputs(msg)
148
172
  Amqpop.eputs msg
149
173
  end
@@ -172,6 +196,7 @@ EOS
172
196
  opt :queue_name, "Name of the queue on the to connect to, unique if not provided", :type => :string, :default => ''
173
197
  opt :queue_durable, "Is the queue persistant", :default => true
174
198
  opt :queue_auto_delete, "Does the queue remove itself", :default => false
199
+ opt :mirror, "Does the queue mirror itself to all nodes", :default => false
175
200
  opt :exchange, "Exchange to bind the queue to. Format [name]:<routing_key>, example: logs or weather:usa.*", :type => :string, :short => "-x", :default => ''
176
201
 
177
202
  opt :wait, "Amount of time in seconds to wait for more messages to show up. Waits forever if 0", :default => 30
@@ -1,3 +1,3 @@
1
1
  module Amqpop
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amqpop
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Chris Cherry
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-11-28 00:00:00 Z
18
+ date: 2012-11-30 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: amqp