Class: JMS::MessageListenerImpl

Inherits:
Object
  • Object
show all
Includes:
MessageListener, SemanticLogger::Loggable
Defined in:
lib/jms/message_listener_impl.rb

Overview

For internal use only by JMS::Connection

Instance Method Summary collapse

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(message)
  begin
    if @message_count
      @message_count += 1
      @last_time     = Time.now
    end
    logger.measure_debug('Message processed') do
      @proc.call message
    end
  rescue SyntaxError, NameError => exc
    logger.error "Ignoring poison message:\n#{message.inspect}", exc
  rescue StandardError => exc
    logger.error "Ignoring poison message:\n#{message.inspect}", exc
  rescue Exception => exc
    logger.error "Ignoring poison message:\n#{message.inspect}", exc
  end
end

#statisticsObject

Return Statistics gathered for this listener

Raises:

  • (ArgumentError)


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