重新将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客户端不重新连接就不会有问题。