当前位置:  开发笔记 > 编程语言 > 正文

将JMS侦听器重新连接到JBossMQ

如何解决《将JMS侦听器重新连接到JBossMQ》经验,为你挑选了3个好方法。

我们有一个Java监听器,它从JBossMQ中的队列中读取文本消息.如果我们必须重新启动JBoss,监听器将不会重新连接并再次开始阅读消息.我们每隔2分钟就会在侦听器的日志文件中收到消息,说它无法连接.我们的代码或JBossMQ中是否有设置?我是JMS的新手,所以任何帮助都将不胜感激.谢谢.



1> Todd..:

您应该在您的客户端代码中实现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
        }
    }

在"establishConnection"代码中,您将实现一个while(!initialized)包含try/catch 的构造.在您确定已正确连接和订阅之前,请留在while循环中捕获所有JMS/Naming/etc. 例外.

我们用JBossMQ多年来一直使用这种方法,效果很好.我们的JMS客户端在弹回JBossMQ或丢失网络连接后没有重新连接,我们从未遇到过问题.



2> James Strach..:

我强烈建议您使用JMS的Spring抽象(如MessageListenerContainer)来处理重新连接,事务和池化.您只需要提供MessageListener并使用ConnectionFactory配置MessageListenerContainer,然后容器完成剩下的工作.



3> John M..:

如果你纯粹是一个监听器并且除了连接设置之外没有其他JMS调用,那么"onException()处理程序"的答案是正确的.

如果在代码中执行任何JMS调用,则仅使用onException()回调是不够的.问题是从JMS提供到应用程序中继要么经由上的JMS方法调用的异常通过onException的()回调.不是都.

因此,如果从代码中调用任何JMS方法,如果在这些调用上获得任何异常,您还需要调用该重新连接逻辑.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有