在下面的代码片段:使用JMS处理JMSExceptions,特别是ActiveMQ?
Connection connection=getConnection();
try {
Session session=connection.createSession();
try {
Queue queue=session.createQueue("foobar");
MessageConsumer consumer=null;
try {
consumer = session.createConsumer(queue);
}
catch(JMSException e) {
// Under what circumstances does this happen?
}
try {
// ...
}
finally {
if(consumer != null) consumer.close();
}
}
finally {
session.close();
}
}
finally {
connection.close();
}
在什么情况下被卡住JMSException
抛出?当它发生时,处理JMSException
的正确方法是什么?我已经阅读了JMS和ActiveMQ文档的相关部分,并且似乎没有给出任何关于此点的指导(显然,除了使用try
/catch
以外)。另外,请原谅代码示例!
例如,做了JMSException
发生,如果session
以某种方式“坏了”,所以它的正确的事情推倒consumer
和session
并重新开始?或者这是否意味着connection
坏了,所以我应该拆除并重建基于该连接的应用程序中的所有内容?或者createConsumer()
的呼叫可能暂时失败,并且使用同一会话重试呼叫可能会成功?
同样,当将这些行抛出一个JMSException
,忽略像一个封闭的Session
或Connection
:
Message message=consumer.receive();
producer.send(message);
我想了解如何JMSException
S的关系在JMS一般进行处理,但具体的答案到ActiveMQ也很好。 (事实上,很可能任何答案都必须针对特定实现,因为JMS只是一个规范。)
精彩的回答。正是我需要知道的。谢谢蒂姆! – sigpwned