2012-05-21 155 views
2

我有一個需求,如果JMS郵件尚未發送到隊列,我必須記錄錯誤消息。如何檢查發送到JMS隊列的消息不成功?

如何檢查郵件是否未被髮送?

代碼:

... 
... 
QueueSender send = session.createSender(queue); 
TextMessage tm = session.createTextMessage(message); 

send.send(tm); 
log.debug("Sent text=" + tm.getText()); 
... 
... 

在此先感謝

回答

1

使用DeliveryMode.PERSISTENT,以確保它是一個可持久並交付,並趕上如果send()失敗,這是上調的JMSException?

+0

是否這樣?嘗試{... QueueSender發送= session.createSender(隊列); send.setDeliveryMode(DeliveryMode.PERSISTENT); TextMessage tm = session.createTextMessage(message); (tm); send.send(tm); log.debug(「Sent text =」+ tm.getText()); 。 。 。} catch(JMSException e){//打印「message not sent」} – user1407668

+0

是的,類似的東西。自從我使用JMS以來已經有一段時間了,但是從我記得的大部分方法中,如果出現任何錯誤,都會引發JMSException。 – mcfinnigan

1

從發送呼叫捕捉異常就足夠了。不需要將傳遞模式設置爲PERSISTENT,因爲即使您希望消息是非持久性的,此選項也會使所有消息持續存在。

try 
{ 
    qsender.Send(msg); 
} 
catch(JMSException je) 
{ 
} 
0

Oracle documentation說:

更多的靈活性,消息隊列可以自定義JMS客戶端確認模式。在客戶端確認模式下,客戶端通過調用消息對象的acknowledge()方法明確確認消息消耗。