在下面的代碼片段:使用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