Class: JSparrow::Connection::Listener

Inherits:
Object
  • Object
show all
Includes:
MessageListener
Defined in:
lib/listener.rb

Overview

Ouvintes de mensagens.

Sao como clientes JMS, mas apenas para recebimento de mensagens.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(connection) ⇒ Listener

Returns a new instance of Listener.



41
42
43
# File 'lib/listener.rb', line 41

def initialize(connection)
  @connection = connection
end

Class Method Details

.listen_to(destination) ⇒ Object

Nome (configurado no setup da conexao) do destino JMS que sera escutado.

Invariavelmente deve ser usado pelas subclasses, para informar o nome da queue ou topico que sera escutado.

listen_to :queue => :registered_name_of_queue listen_to :topic => :registered_name_of_topic



25
26
27
# File 'lib/listener.rb', line 25

def self.listen_to(destination)
  configure(:listen_to_destination, destination)
end

.receive_only_in_criteria(criteria = {:selector => ''}) ⇒ Object

Criterios de selecao de mensagens, seguindo o padrao JMS.

Invariavelmente as subclasses precisam usar esse metodo, se quiserem definir os criterios de recebimento que este listener levara em conta.

receive_only_in_criteria :selector => “recipient = ‘jsparrow-spec’ and to_listener = ‘TestQueueListener’”



37
38
39
# File 'lib/listener.rb', line 37

def self.receive_only_in_criteria(criteria = {:selector => ''})
  configure(:criteria_to_receiving, criteria)
end

Instance Method Details

#is_listening?Boolean

Returns:

  • (Boolean)


45
46
47
# File 'lib/listener.rb', line 45

def is_listening?
  @connection.is_opened?
end

#on_message(received_message) ⇒ Object

Faz o enriquecimento do objeto mensagem e delega para o metodo on_receive_message que, implementado pelas subclasses, efetivamente trata a mensagem.

Nao deve ser re-implementado por subclasses.



88
89
90
91
92
93
94
# File 'lib/listener.rb', line 88

def on_message(received_message)
  class << received_message
    include Messaging::MessageType
  end
  
  on_receive_message(received_message)
end

#on_receive_message(received_message) ⇒ Object

E executado todas as vezes que chega uma mensagem que atenda aos criterios definido para este listener (na variavel de instancia @criteria_for_receiving).

Invariavelmente deve ser re-implementado nas subclasses.



102
103
104
# File 'lib/listener.rb', line 102

def on_receive_message(received_message)
  raise Error::AbstractMethodError.new(self.class.superclass, 'on_receive_message')
end

#start_listeningObject

Inicia a escuta de mensagens.



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/listener.rb', line 52

def start_listening
  @connection.open
  
  connection_factory, destination = lookup_resources
  
  selector = criteria_to_receiving[:selector] if respond_to? :criteria_to_receiving
  
  # Cria uma conexao para escuta de mensagens
  @listening_connection = connection_factory.create_connection
  
  # Cria uma sessao e um consumidor de qualquer tipo de mensagem
  session  = @listening_connection.create_session(false, Session::AUTO_ACKNOWLEDGE)
  consumer = session.create_consumer(destination, selector)
  
  # Registra-se como ouvinte
  consumer.message_listener = self
  
  # Inicia a escuta de mensagens
  @listening_connection.start
end

#stop_listeningObject

Finaliza a escuta de mensagens.



76
77
78
79
80
# File 'lib/listener.rb', line 76

def stop_listening
  @listening_connection.close
  
  @connection.close
end