首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将JMS侦听器重新连接到JBossMQ

将JMS侦听器重新连接到JBossMQ
EN

Stack Overflow用户
提问于 2008-09-06 17:33:00
回答 4查看 9.5K关注 0票数 13

我们有一个从JBossMQ队列中读取文本消息的。如果我们必须重新启动JBoss,监听程序将不会重新连接并再次开始读取消息。我们每隔2分钟就会在监听器的日志文件中收到一条消息,告诉我们它无法连接。有没有什么东西我们没有在我们的代码或JBossMQ中设置?我是JMS的新手,因此任何帮助都将不胜感激。谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-09-07 00:05:10

您应该在客户端代码中实现javax.jms.ExceptionListener。您将需要一个名为onException的方法。当客户端的连接断开时,您应该获得一个JMSException,此方法将被自动调用。唯一需要注意的是,如果您有意断开与JBossMQ的连接,也会抛出异常。

一些代码可能如下所示:

代码语言:javascript
复制
    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“代码中,您将实现一个内部包含try/catch的while(!initialized)构造。在您确定已正确连接和订阅之前,请留在while循环中,捕获所有JMS/命名/等异常。

我们在JBossMQ中使用这种方法已经有几年了,效果很好。我们从来没有遇到过我们的JMS客户端在弹出JBossMQ或失去网络连接后无法重新连接的问题。

票数 10
EN

Stack Overflow用户

发布于 2008-09-16 14:24:52

我强烈建议您使用Spring abstractions for JMS such as the MessageListenerContainer为您处理重新连接、事务和池化。您只需提供一个MessageListener并使用ConnectionFactory配置MessageListenerContainer,剩下的工作由容器完成。

票数 9
EN

Stack Overflow用户

发布于 2008-09-22 20:43:01

如果您纯粹是一个侦听器,并且只执行连接设置之外的其他JMS调用,那么"onException()处理程序“的答案是正确的。

如果在代码中执行任何JMS调用,仅使用onException()回调是不够的。通过JMS方法调用的异常或通过onException()回调,将问题从JMS提供程序中继到应用程序。不是两个都有。

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档