重新将JMS侦听器连接到JBossMQ
问题内容:
我们有一个Java侦听器,它从JBossMQ的队列中读取文本消息。如果必须重新启动JBoss,则侦听器将不会重新连接并重新开始阅读消息。我们只是每2分钟在侦听器的日志文件中收到一条消息,指出该消息无法连接。我们在代码或JBossMQ中没有设置什么吗?我是JMS的新手,因此将非常感谢您的帮助。谢谢。
问题答案:
您应该在客户端代码中实现javax.jms.ExceptionListener。您将需要一个名为onException的方法。当客户端的连接断开时,您应该得到一个JMSException,并且此方法将被自动调用。您唯一需要注意的是,如果您有意与JBossMQ断开连接-
这也会引发异常。
一些代码可能看起来像这样:
public void onException (JMSException jsme)
{
if (!closeRequested)
{
this.disconnect();
this.establishConnection(connectionProps, queueName, uname, pword, clientID, messageSelector);
}
else
{
//Client requested close so do not try to reconnect
}
}
然后,在“建立连接”代码中,将实现一个while(!initialized)
在其中包含try / catch
的构造。在确定已正确连接并订阅之前,请留在while循环中,以捕获所有JMS / Naming / etc。例外。
我们在JBossMQ中使用这种方法已有多年,并且效果很好。弹跳JBossMQ或失去网络连接后,我们的JMS客户端不重新连接就不会有问题。