Dica para realizar troca de mensagens entre apps

Galera,

To em um empasse e gostaria de saber da galera o que vocês indicariam (tecnologia) para realizar troca de mensagens entre apps? Atualmente eu estou utilizando JMS mas nao sei se é uma boa opção. O que vocês acham?

Obrigado pelas dicas!

Olá

JMS é uma ótima opção desde que na mesma rede. Neste caso não conheço nada que tenha a mesma escalabilidade.

Qual servidor de mensagens usa?

[]s
Luca

da uma olhada no ActiveMQ

Meu AS é o JBoss entao eu estou usando o JBossMQ. Achei a documentação vaga e não vi como eu posso implementar, por exemplo, multiplos consumidores de queue (Multiple Queue Consumers). Acho que ele nem faz isso apesar de ter um objeto no JNDI que serve pra isso (pelo menos é o que parece).

As apps estão distantes uma das outras mas possuem IPs validos logo eu consigo acessar o jndi da outra app e setar as informações nos objetos corretos. Da maneira que implementei acontece uma serie de coisas estranhas. Algumas delas são:
-Quando uma das apps está off line o jboss demoraaaaaaaa devolver uma resposta, parece que ele tenta umas 100 vezes conectar na maquina ate disistir.
-Quando demora muito pra aparecer alguma mensagem nova o jboss fica acusando uns warning de pong… Chego a ficar aguniado!

WARN [org.jboss.mq.Connection] Connection failure, use javax.jms.Connection.setExceptionListener() to handle this error and reconnect org.jboss.mq.SpyJMSException: Cannot ping the JMS server; - nested throwable: (java.io.IOException: Client is not connected) at org.jboss.mq.SpyJMSException.getAsJMSException(SpyJMSException.java:78) at org.jboss.mq.SpyJMSException.rethrowAsJMSException(SpyJMSException.java:63) at org.jboss.mq.Connection.pingServer(Connection.java:846) at org.jboss.mq.Connection$PingTask.run(Connection.java:1281) at EDU.oswego.cs.dl.util.concurrent.ClockDaemon$RunLoop.run(ClockDaemon.java:364) at java.lang.Thread.run(Unknown Source) Caused by: java.io.IOException: Client is not connected at org.jboss.mq.il.uil2.SocketManager.internalSendMessage(SocketManager.java:265) at org.jboss.mq.il.uil2.SocketManager.sendReply(SocketManager.java:239) at org.jboss.mq.il.uil2.UILServerIL.ping(UILServerIL.java:488) at org.jboss.mq.Connection.pingServer(Connection.java:842) ... 3 more

. Outra coisa terrivel é uns erros que acontecem quando eu recompilo a aplicação.

17:59:13,593 INFO [WebappClassLoader] Illegal access: this web application instance has been stopped already. Could not load org.jboss.util.NestedThrowable $Util. The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact. java.lang.IllegalStateException at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1238) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1198) at java.lang.ClassLoader.loadClassInternal(Unknown Source) at org.jboss.mq.SpyJMSException.<init>(SpyJMSException.java:118) at org.jboss.mq.SpyJMSException.getAsJMSException(SpyJMSException.java:78) at org.jboss.mq.Connection.asynchFailure(Connection.java:420) at org.jboss.mq.il.uil2.UILClientILService.asynchFailure(UILClientILService.java:174) at org.jboss.mq.il.uil2.SocketManager$ReadTask.handleStop(SocketManager.java:440) at org.jboss.mq.il.uil2.SocketManager$ReadTask.run(SocketManager.java:372) at java.lang.Thread.run(Unknown Source) 17:59:13,593 ERROR [STDERR] Exception in thread "UIL2.SocketManager.ReadTask#5 client=192.168.1.9:8093" 17:59:13,593 ERROR [STDERR] java.lang.NoClassDefFoundError: org/jboss/util/NestedThrowable$Util 17:59:13,593 ERROR [STDERR] at org.jboss.mq.SpyJMSException.<init>(SpyJMSException.java:118) 17:59:13,593 ERROR [STDERR] at org.jboss.mq.SpyJMSException.getAsJMSException(SpyJMSException.java:78) 17:59:13,593 ERROR [STDERR] at org.jboss.mq.Connection.asynchFailure(Connection.java:420) 17:59:13,593 ERROR [STDERR] at org.jboss.mq.il.uil2.UILClientILService.asynchFailure(UILClientILService.java:174) 17:59:13,593 ERROR [STDERR] at org.jboss.mq.il.uil2.SocketManager$ReadTask.handleStop(SocketManager.java:440) 17:59:13,593 ERROR [STDERR] at org.jboss.mq.il.uil2.SocketManager$ReadTask.run(SocketManager.java:372) 17:59:13,593 ERROR [STDERR] at java.lang.Thread.run(Unknown Source)

No fim, to achando esse JBossMQ muito “largado” e então gostaria de saber dos Senhores (as) dicas de como fazer essa troca de mensagens entre minhas apps!?.

Grato mais uma vez,

Olá

  1. Para cada fila pode existir um ou mais producers e zero ou mais consumers. Porém cada mensagem enviada por um producer é recebida por no máximo um consumer escutando a fila, mesmo que mais consumers esteja escutando a mesma fila. Para que vários recebam a mesma mensagem o domínio deveria ser Publish-and-subscribe.

  2. Deixando de lado a questão 1 que me parece que não funcionará em lugar nenhum, experimente o ActiveMQ só para comparar com o JBossMQ. Veja http://www.activemq.org/site/how-does-activemq-compare-to-jbossmq.html

[]s
Luca

Beleza! Vou olhar o ActiveMQ, afinal de contas foi opinião unânime!!

Grato.