我在我的项目中使用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)
请帮忙。任何提示都受到高度赞赏。
答案 0 :(得分:3)
这是故障转移的意图:传输。它将隐藏传输故障并自动尝试重新连接,在建立新连接时重放任何jms状态。 有一个transportListener可用于获取传输暂停和恢复事件。 如果从代理URL中删除故障转移:组件,则会将所有异常传播到您的客户端。
答案 1 :(得分:0)
只需在连接URI上设置timeout
属性,它就会抛出错误而不是阻塞线程......
failover://(ssl://localhost:61618?trace=true&wireFormat.maxInactivityDuration=0)?timeout=10000
请参阅http://activemq.apache.org/failover-transport-reference.html