Consumidor de Filas JMS

Posso criar uma fila JMS e apontá-la diretamente para uma API ou um WebService em um servidor remoto?
Ou preciso criar um message consumer? Se sim, como integrar essa fila consumidora à API ou Webservice?

Cara vc cria a fila, e cria um “ouvinte” no WebSphere, ai vc pode criar um EJB do tipo MDB para ouvir na porta configurada no WebSphere, eu fiz um tutorial sobre isto, pois tive problema de achar material bom na interne sobre o contexto todo.

Se você quiser posso te passar.

1 curtida

pode me passar também ?

Estou tendo que estudar sobre esse assunto

Então, mas o que eu ainda não entendi é como integrar esse ouvinte que eu crio à API ou WebService que preciso integrar…

O ouvinte é uma classe que implementa um MessageListener.

Daí você implementa o método onMessage, que tem as mensagens de uma fila em particular ou tópico.

Daí você pode usar um message drive bean que implementa essa interface que ele vai ouvir as mensagens.

Eu também estou começando a ver esse tipo de coisa.

ErickMacedo se puder passar o material o meu e-mail é
leandro.alcantara.souza@gmail.com

Obrigado.

Cara você já tem a fila criada ?

Então entra no WebSpher e siga esses passos

1 Criando a Fábrica de Conexão com o Gerenciador de Fila

Para criar a conexão com a Fila, abra o console administrativo do servidor de aplicação e na área de janela de navegação , expanda Recursos ? JMS ? Connection Factories da fila.

Altere a definição Escopo para o nível no qual o destino JMS está visível para os aplicativos.

Em seguida seleciona a opção WebSphere MQ messaging provider e clique em OK.

Abrirá uma janela com as propriedades de configurações da conexão. Especifique as seguintes propriedades como descrito abaixo.

Nome : Nome pelo qual a conexão é conhecida para propósitos administrativos no IBM WebSphere Application Server
Nome JNDI : JNDI utilizado para ligar a conexão no espaço de nomes.
Gerenciador de Filas : Nome do Gerenciador criado no WebSphere MQ.
Host : Host do servidor de mensagens
Porta :Porta do servidor de mensagens
Tipo de Transporte : Tipo de Transporte.
CCSID : O identificador do conjunto de caracteres codificado para ser utilizado como o gerenciador de filas do WebSphere MQ

Clique em Aplicar. Isto define a fabrica de conexão da Fila para o WebSphere Application

2 Criando o Destino da Fila

Agora iremos criar o destino da Fila no servidor de aplicação, ainda no console do servidor na área de janela de navegação, expanda Recursos ? JMS ? Filas

Após clicar em Filas, clique em Novo

Selecione a opção WebSphere MQ messaging provider e clique em OK

Assim como nas configurações da fabrica de conexão irá aparecer uma janela similar aonde iremos configurar as propriedade de destino da Fila.

Nome : O nome pelo qual esse destino de fila é conhecido para propósitos administrativos no IBM WebSphere Application Server
Nome JNDI : O nome de JNDI que é utilizado para ligar o destino de fila no espaço de nomes.
Nome da Fila Base : O nome da fila para a qual as mensagens são enviadas, no gerenciador de filas especificado pela propriedade Nome do Gerenciador de Filas Base.
Nome do Gerenciador de Filas Base : Nome do gerenciador da fila criado no WebSphere MQ
CCSID : O identificador do conjunto de caracteres codificado para ser utilizado como o gerenciador de filas do WebSphere MQ

Clique em Aplicar. Isso define o destino de Fila para o WebSphere Application Server, reinicie o servidor para as alterações sofrerem resultado.
PRONTO TEMOS O AS CONEXÕES PARA ENVIAR MENSAGEM PARA FILA

ENVIANDO MENSAGEM

Agora iremos codificar o produtor de mensagens com um EJB de sessão sem estado que será responsável por enviar mensagens para a Fila.

Enviando mensagem para Fila.

Em um projeto EJB criamos a classe EnvioPedidoBean que implementa a interface SessionBean que define uma classe Java normal como um EJB de sessão, você deverá criar a interfaces necessárias para uso deste EJB, a criação dessas interfaces foge do escopo deste tutorial, você também poderá optar por criar este EJB usando recursos automatizados pela sua IDE.


public class EnvioPedidoBean implements SessionBean{

	public void enviarPedido(Pedido pedido){
	 try {
	  Context contexto = new InitialContext(); 
	  QueueConnectionFactory fabricaConexaoFila = QueueConnectionFactory)             
    contexto.lookup ("jms/QueueConnectionFactory" ); 
	  QueueConnection conexaoFila =                
    fabricaConexaoFila.createQueueConnection();
	  Queue filaPedido=(Queue)contexto.lookup ("jms/filaPedido");
	  QueueSession sessaoConexaoFila = conexaoFila.createQueueSession (false 
    ,Session.AUTO_ACKNOWLEDGE ) ;
	  QueueSender transporteFila = sessaoConexaoFila.createSender(filaPedido);
    ObjectMessage mensagem = sessaoConexaoFila.createObjectMessage();
    mensagem.setObject(pedido);  
	  transporteFila.send(mensagem);
	  sessaoConexaoFila.close();
	  transporteFila.close();
	  conexaoFila.close();
	} catch (NamingException e) {
	 // Tratar Exceção
	} catch (JMSException e) {
	 // Tratar Exceção
	} catch (SecurityException e) {
	 // Tratar Exceção
	} catch (IllegalStateException e) {
	 // Tratar Exceção
	}		
}

public void ejbCreate() throws CreateException {
	System.out.println("Bean criado");
}
public void ejbActivate() throws EJBException, RemoteException {
	System.out.println("Bean ativado");
}
public void ejbPassivate() throws EJBException, RemoteException{
  System.out.println("Bean desativado");
	}
public void ejbRemove() throws EJBException, RemoteException {
	System.out.println("Bean removido");
}
public void setSessionContext(SessionContext s)throws EJBException,RemoteException {
	// Implementação
}
}

Algumas considerações sobre a codificação do produtor de mensagem.

QueueConnectionFactory : é reponsável por criar a fabrica de conexão para o envio de mensagem, adquirimos esta fabrica pelo JNDI definido no WebSphere Application Server .
QueueConnection : é a conexão com o gerenciador de mensagens que é criado a partir do QueueConnectionFactory.
Queue : é a própria Fila, melhor dizendo o destino da fila, pegamos este pelo JNDI definido no WebSphere Application Server
QueueSession : é uma sessão com a conexão.
QueueSender : é o objeto responsável para enviar nossa mensagem para a Fila configurada
ObjectMessage : é o objeto a ser enviado para a Fila, este encapsula o objeto real.

Pronto a mensagem foi enviada para Fila, o próximo passo é consumir esta mensagem .

AGORA VAMOS CONSUMIR NA FILA

Consumindo Mensagens com Message Driven Beans e JMS

No servidor responsável por consumir a mensagem , iremos criar um MDB , também precisamos criar um ?ouvinte? no WebSphere Application Server que será responsável por ouvir na Fila , ou seja, sempre que conter alguma mensagem na Fila este ouvinte irá avisar o MDB para consumir esta mensagem.
Caso esteja usando uma instância do servidor de aplicação diferente do usado anteriormente, que é realmente o que acontece na prática, terá que configurar a fabrica de conexão como foi mostrado no item 1 e o destino da fila como no item 2 alternando apenas entre a propriedade Cliente de Destino.

Criando Listener para fila.

No console administrativo do servidor, área de janela de navegação, expanda Servidores ? Servidores de Aplicativos, irá abrir uma janela com o nome do servidor, clique no mesmo.

Em seguida abrirá uma nova janela, você terá que expandir a opção Sistema de Mensagens que se encontra no lado direito da tela e em seguida clicar em Serviço de Listener de Mensagem.

Na janela de configuração de ouvinte de mensagem, em Propriedades Adicionais clique em Portas do Listener.

Clique em Novo para criar o ouvinte.

Por fim informe as propriedades de configurações
.
Nome : É a propriedade responsável para definir a identificação do ouvinte
Nome JNDI da Connection Factory : O nome JNDI da conexão com o gerenciador de Fila MQ.
Nome JNDI de Destino : O nome JNDI do destino da Fila que iremos consumir as mensagens.

Clique em Aplicar. Isso define o Listener da Fila para o WebSphere Application Server, reinicie o servidor para que as alterações sofram efeito.
O próximo e último passo é criar o MDB que irá usar este ouvinte para consumir as mensagens.

AGORA VAMOS PEGAR AS MENSAGENS DA FILA

Criando o Message Driven Beans

Crie uma classe Java que implementa a interface MessageDrivenBean isto defina nossa classe como um MDB já a interface MessageListener define nossa classe como ouvinte de uma Fila pelo JMS, você pode optar por criar esse EJB por algum dos recursos automatizados da sua IDE.


public class ProcessaMsgMDBBean implements MessageDrivenBean, essageListener {

	private MessageDrivenContext fMessageDrivenCtx;
	public MessageDrivenContext getMessageDrivenContext() {
		return fMessageDrivenCtx;
	}
	public void setMessageDrivenContext(MessageDrivenContext ctx) {
		fMessageDrivenCtx = ctx;
	}
	public void ejbCreate() {
	}
	public void ejbRemove() {
	}
	public void onMessage(Message message) {
     // Realizar o procedimento necessário com a mensagem

	}
}

Algumas observações sobre a codificação do nosso produtor de mensagem.
onMessage : este método será invocado sempre que for consumir uma mensagem da Fila, recuperando o objeto real e realizando os procedimentos necessários .

Será necessário sobrescrever os métodos padrão do EJB e o método onMessage do JMS, este método será invocado sempre que for processar uma mensagem da Fila.

Ai cara mostrei os passos básico para criar conexao com a fila e enviar mensagem, e criar o ouvinte para consumir mensagem