amq-client 0.8.1 → 0.8.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,7 +5,6 @@ before_script: ./bin/ci/before_build.sh
5
5
  rvm:
6
6
  - jruby
7
7
  - 1.8.7
8
- - 1.8.7-p249
9
8
  - rbx-2.0
10
9
  - 1.9.2
11
10
  - 1.9.3
@@ -442,6 +442,20 @@ module AMQ
442
442
  end # start_automatic_recovery
443
443
 
444
444
 
445
+ # Defines a callback that will be executed after time since last broker heartbeat is greater
446
+ # than or equal to the heartbeat interval (skipped heartbeat is detected).
447
+ # Only one callback can be defined (the one defined last replaces previously added ones).
448
+ #
449
+ # @api public
450
+ def on_skipped_heartbeats(&block)
451
+ self.redefine_callback(:skipped_heartbeats, &block)
452
+ end # on_skipped_heartbeats(&block)
453
+
454
+ # @private
455
+ def run_skipped_heartbeats_callbacks
456
+ self.exec_callback_yielding_self(:skipped_heartbeats, @settings)
457
+ end
458
+
445
459
  # @endgroup
446
460
 
447
461
 
@@ -528,10 +542,10 @@ module AMQ
528
542
  # Sends a heartbeat frame if connection is open.
529
543
  # @api plugin
530
544
  def send_heartbeat
531
- if tcp_connection_established?
532
- if @last_server_heartbeat < (Time.now - (self.heartbeat_interval * 2))
533
- logger.error "Reconnecting due to missing server heartbeats"
534
- # TODO: reconnect
545
+ if tcp_connection_established? && !@handling_skipped_hearbeats
546
+ if @last_server_heartbeat < (Time.now - (self.heartbeat_interval * 2)) && !reconnecting?
547
+ logger.error "[amqp] Detected missing server heartbeats"
548
+ self.handle_skipped_hearbeats
535
549
  end
536
550
  send_frame(Protocol::HeartbeatFrame)
537
551
  end
@@ -274,6 +274,11 @@ module AMQ
274
274
  AMQ::Client::TCPConnectionFailed
275
275
  end # self.tcp_connection_failure_exception_class
276
276
 
277
+ def handle_skipped_hearbeats
278
+ # TODO
279
+ end
280
+
281
+
277
282
  protected
278
283
 
279
284
  # @api private
@@ -291,7 +296,8 @@ module AMQ
291
296
 
292
297
  # now we can set it. MK.
293
298
  @had_successfully_connected_before = true
294
- @reconnecting = false
299
+ @reconnecting = false
300
+ @handling_skipped_hearbeats = false
295
301
 
296
302
  self.reset
297
303
  self.handshake
@@ -173,8 +173,7 @@ module AMQ
173
173
  self.set_pending_connect_timeout((@settings[:timeout] || 3).to_f) unless defined?(JRUBY_VERSION)
174
174
 
175
175
  if self.heartbeat_interval > 0
176
- @last_server_heartbeat = Time.now
177
- EventMachine.add_periodic_timer(self.heartbeat_interval, &method(:send_heartbeat))
176
+ self.initialize_heartbeat_sender
178
177
  end
179
178
  end # initialize(*args)
180
179
 
@@ -265,7 +264,11 @@ module AMQ
265
264
 
266
265
  # now we can set it. MK.
267
266
  @had_successfully_connected_before = true
268
- @reconnecting = false
267
+ @reconnecting = false
268
+ @handling_skipped_hearbeats = false
269
+ @last_server_heartbeat = Time.now
270
+
271
+ self.initialize_heartbeat_sender if self.heartbeat_interval > 0
269
272
 
270
273
  self.handshake
271
274
  end
@@ -287,6 +290,7 @@ module AMQ
287
290
  def unbind(exception = nil)
288
291
  if !@tcp_connection_established && !@had_successfully_connected_before && !@intentionally_closing_connection
289
292
  @tcp_connection_failed = true
293
+ logger.error "[amqp] Detected TCP connection failure"
290
294
  self.tcp_connection_failed
291
295
  end
292
296
 
@@ -346,7 +350,24 @@ module AMQ
346
350
  closed!
347
351
  end # disconnection_successful
348
352
 
353
+ # Called when time since last server heartbeat received is greater or equal to the
354
+ # heartbeat interval set via :heartbeat_interval option on connection.
355
+ #
356
+ # @api plugin
357
+ def handle_skipped_hearbeats
358
+ if !@handling_skipped_hearbeats && @tcp_connection_established && !@intentionally_closing_connection
359
+ @handling_skipped_hearbeats = true
360
+ @heartbeats_timer.cancel
349
361
 
362
+ self.run_skipped_heartbeats_callbacks
363
+ end
364
+ end
365
+
366
+ # @private
367
+ def initialize_heartbeat_sender
368
+ @last_server_heartbeat = Time.now
369
+ @heartbeats_timer = EventMachine::PeriodicTimer.new(self.heartbeat_interval, &method(:send_heartbeat))
370
+ end
350
371
 
351
372
 
352
373
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module AMQ
4
4
  module Client
5
- VERSION = "0.8.1"
5
+ VERSION = "0.8.2"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amq-client
3
3
  version: !ruby/object:Gem::Version
4
- hash: 61
4
+ hash: 59
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 8
9
- - 1
10
- version: 0.8.1
9
+ - 2
10
+ version: 0.8.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jakub Stastny
@@ -18,7 +18,7 @@ autorequire:
18
18
  bindir: bin
19
19
  cert_chain: []
20
20
 
21
- date: 2011-08-25 00:00:00 +04:00
21
+ date: 2011-08-28 00:00:00 +04:00
22
22
  default_executable:
23
23
  dependencies:
24
24
  - !ruby/object:Gem::Dependency