Class: JMS::MessageListenerImpl
- Inherits:
-
Object
- Object
- JMS::MessageListenerImpl
- Includes:
- MessageListener, SemanticLogger::Loggable
- Defined in:
- lib/jms/message_listener_impl.rb
Overview
For internal use only by JMS::Connection
Instance Method Summary collapse
-
#initialize(params = {}, &proc) ⇒ MessageListenerImpl
constructor
Parameters: :statistics Capture statistics on how many messages have been read true : This method will capture statistics on the number of messages received and the time it took to process them.
-
#onMessage(message) ⇒ Object
Method called for every message received on the queue Per the JMS specification, this method will be called sequentially for each message on the queue.
-
#statistics ⇒ Object
Return Statistics gathered for this listener.
Constructor Details
#initialize(params = {}, &proc) ⇒ MessageListenerImpl
Parameters:
:statistics Capture statistics on how many messages have been read
true : This method will capture statistics on the number of messages received
and the time it took to process them.
The timer starts when the listener instance is created and finishes when either the last message was received,
or when Destination::statistics is called. In this case MessageConsumer::statistics
can be called several times during processing without affecting the end time.
Also, the start time and message count is not reset until MessageConsumer::each
is called again with statistics: true
The statistics gathered are returned when statistics: true and async: false
21 22 23 24 25 26 27 28 |
# File 'lib/jms/message_listener_impl.rb', line 21 def initialize(params={}, &proc) @proc = proc if params[:statistics] @message_count = 0 @start_time = Time.now end end |
Instance Method Details
#onMessage(message) ⇒ Object
Method called for every message received on the queue Per the JMS specification, this method will be called sequentially for each message on the queue. This method will not be called again until its prior invocation has completed. Must be onMessage() since on_message() does not work for interface methods that must be implemented
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/jms/message_listener_impl.rb', line 34 def onMessage() begin if @message_count @message_count += 1 @last_time = Time.now end logger.measure_debug('Message processed') do @proc.call end rescue SyntaxError, NameError => exc logger.error "Ignoring poison message:\n#{.inspect}", exc rescue StandardError => exc logger.error "Ignoring poison message:\n#{.inspect}", exc rescue Exception => exc logger.error "Ignoring poison message:\n#{.inspect}", exc end end |
#statistics ⇒ Object
Return Statistics gathered for this listener
53 54 55 56 57 58 59 60 61 |
# File 'lib/jms/message_listener_impl.rb', line 53 def statistics raise(ArgumentError, 'First call MessageConsumer::on_message with statistics: true before calling MessageConsumer::statistics()') unless @message_count duration = (@last_time || Time.now) - @start_time { messages: @message_count, duration: duration, messages_per_second: (@message_count/duration).to_i } end |