我正在编写一个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)。所以,我的问题是:
我应该如何在侦听器中捕获这些问题,以便我可以编写一些东西来从错误中恢复或者至少终止进程?
谢谢!
答案 0 :(得分:3)
这就是ExceptionListener的用途。您可以在Connection实例上设置ExceptionListener,然后当出现像这样的带外故障时,您将收到通知。