处理JMS操作中的异常

时间:2012-10-22 10:45:55

标签: jms activemq

我在我的项目中使用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)

请帮忙。任何提示都受到高度赞赏。

2 个答案:

答案 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