JMS como separar mensagens?

7 respostas
leokaos
Estou utilizando JMS na aplicação da empresa onde trabalho e surgiu uma duvida: como fazer uma arquitetura correta com JMS utilizando Java SE?
    Estou com o seguinte problema: existe vários "tipos" de mensagem dentro do sistema, por exemplo, quando chega um recado para o funcionário, quando um novo cliente chega no sistema, quando uma mercadoria tem alteração de valor ou status, enfim, vários "tipos" de mensagens... Hoje eu faço isso manualmente separando as mensagens pelo tipo de objeto que envio, mas é POG...
    Além disso, quando chega uma mensagem por exemplo de cliente, uma telinha é mostrada para o usuário avisando que o cliente chegou, entretanto quando chega mais de uma mensagem de cliente, não consegui fazer com que a mesma tela, apenas adicionando a mensagem numa JList, alguma sugestão?

7 Respostas

ivandasilva

Cara, não sou expert no assunto, alias, sou leigo, tanto quanto você, mas, eu sei que colocando um ESB no seu sistema de mensageria, ele poderia filtrar as mensagens e direciona-las para o seu responsável.

WRYEL

Você precisa usar o messageSelector do JMS :smiley:

http://publib.boulder.ibm.com/infocenter/wmbhelp/v6r1m0/index.jsp?topic=%2Fcom.ibm.etools.mft.doc%2Fac24876_.htm

[]'s

leokaos

esse jms selector funciona em qualquer broquer? estou utilizando o IMQ do GlassFish

WRYEL

deveria, pois messageSelector é da especificação do JMS (a menos que o IMQ não cubra a especificação) :frowning:

posta o código aqui de como você faz sua chamada.

No JBoss seria algo +/- assim:

@MessageDriven(actvationConfig={
    @ActivationConfigProperty(propertyName="messageSelector", propertyValue="MessageFormat = 'Version 1'")
})
public class MeuMDB implements MessageListener {
    ...
}

ai para enviar a mensagem:

Message message = session.createMapMessage();
message.setStringProperty("MessageFormat", "Version 1");

o propertyValue do messageSelector aceita condições complexas como se fosse uma instrução SQL.

fonte: Enterprevise JavaBeans 3.0, pagina: 194 :slight_smile:

leokaos

Então eu criaria um listener para cada “tipo” de mensagem, configurando o JMSSelector?

Não consegui adicionar mais de 1 listener ao consumer, como faço? ou vou ter q criar vários consumer?

pugnator

pra usar o messageselect vc precisa usar um atributo como chave para busca

no meu caso busco por um cpf informado

mensagem.setStringProperty("cpf", "123456") MessageConsumer consumer = session.createConsumer(destination, "cpf='123456'"); //

vc pode usar os atributos do cabeçalho da mensagem…

no site da k19.com.br … tem uma apostila de jms bem bacana(pelo menos tinha)

leokaos

Entendi…então para cada “tipo” de mensagem terei que criar um consumer diferente, eh isso?

Criado 8 de março de 2012
Ultima resposta 14 de mar. de 2012
Respostas 7
Participantes 4