如何捕获在MessageListener中引发的ActiveMQ线程异常

时间:2014-04-16 21:16:03

标签: activemq message-listener

我正在编写一个ActiveMq 5.9 MessageListener。我能够正确地从代理获取消息,但我关心的是如何处理异常情况。 例如,当侦听器仍然处于关闭状态时关闭ActiveMq代理时,侦听器将打印以下日志:

2014-04-16 17:38:50,559 DEBUG [ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@55509] ActiveMQConnection - Async exception with no   exception listener: java.io.EOFException
java.io.EOFException
   at java.io.DataInputStream.readInt(DataInputStream.java:392)
   at org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:275)
   at   org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:221)
at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:213)
at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:196)
at java.lang.Thread.run(Thread.java:744) 

问题是我无法捕获异常,即使我试图在进程的主方法中捕获(Throwable)。所以,我的问题是:

我应该如何在侦听器中捕获这些问题,以便我可以编写一些东西来从错误中恢复或者至少终止进程?

谢谢!

1 个答案:

答案 0 :(得分:3)

这就是ExceptionListener的用途。您可以在Connection实例上设置ExceptionListener,然后当出现像这样的带外故障时,您将收到通知。