0

我在我的项目中使用 activeMQ 5.4 来实现 JMS。我想在每次应用程序无法发送消息时通知用户,但在发生异常时我没有得到任何处理。例如,如果 JMS 代理关闭并且我在 try 块中执行创建连接、会话等或消息发送操作,则控制永远不会返回到 catch 块或为连接设置的 ExceptionListener。我的代码如下所示:

connection = (TopicConnection) (new ActiveMQConnectionFactory(localBrokerURL)).createConnection();
connection.setExceptionListener(new ExceptionListener() {               
    @Override
    public void onException(JMSException arg0) {
        System.out.println("Exception Occurred");
    }
});
connection.start();
final TopicSession session =conn.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
final Topic sendTopic = session.createTopic("someTopicName");

localBrokerURL 的值在哪里

failover://(ssl://localhost:61618?trace=true&wireFormat.maxInactivityDuration=0)

请帮忙。任何提示都非常感谢。

4

2 回答 2

3

这就是故障转移的目的:传输。它将隐藏传输失败并自动尝试重新连接,并在建立新连接时重播任何 jms 状态。有一个 transportListener 可用于获取传输暂停和恢复事件。如果您从代理 url 中删除故障转移:组件,您将获得传播到您的客户端的所有异常。

于 2012-10-22T11:52:37.417 回答
0

只需timeout在连接 URI 上设置属性,它就会抛出错误而不是阻塞线程......

failover://(ssl://localhost:61618?trace=true&wireFormat.maxInactivityDuration=0)?timeout=10000

http://activemq.apache.org/failover-transport-reference.html

于 2012-10-23T19:47:41.873 回答