let's say we have 2 applications app1 and app2. These 2 applications were previously running on the same server. We have a message driven bean EventTopicSubscriberBean in app1, listening to a JMS queue "eventQueue". This eventQueue is filled by app2. On a single-server architecture, this was working fine.
But recently, we modified our architecture, and now have 2 jboss running these applications, let's call them server1 and server2.
I explored two possibilities to ensure that we don't lose any message:
I put the eventQueue on server1, and I do a remote lookup from server2 to fill the "eventQueue". Problem is: when server1 goes down, messages are not put in the queue.
I put the eventQueue on server2, and I make the message driven bean listen to that queue using method described here: https://www.jboss.org/community/docs/DOC-9892. That works almost fine... when server2 goes down, the message listener of the mdb tries to reconnect and succeeds when server2 goes back. But when the server1 is started whereas the server2 is down, the MDB won't be deployed, failing with:
Reason: javax.naming.CommunicationException: Could not obtain connection to any of these urls: 127.0.0.2:1099 and discovery failed with error: javax.naming.CommunicationException: Receive timed out [Root exception is java.net.SocketTimeoutException: Receive timed out] [Root exception is javax.naming.CommunicationException: Failed to connect to server 127.0.0.2:1099 [Root exception is javax.naming.ServiceUnavailableException: Failed to connect to server 127.0.0.2:1099 [Root exception is java.net.ConnectException: Connection refused]]]
One solution would be to create a "bridge" between a new queue on app2 and the eventQueue on app1. It seems to be possible with jboss messaging, but we are running jboss 4.2.3 with jboss mq, and I don't know how to do such a thing.
Would you have any idea to solve that little problem ?