2013-05-21 76 views
3

在JMS文檔中,我讀到消息驅動Bean不支持CLIENT_ACKNOWLEDGE模式,僅支持DUPS_OK_ACKNOWLEDGEAUTO_ACKNOWLEDGE如何確認消息驅動Bean中的消息

據我所知,在AUTO_ACKNOWLEDGE模式下,當onMessage方法被調用時,消息被確認(從目的地刪除)。我想要的是告訴我的經紀人不要在發生故障時從目的地(隊列或主題)刪除消息

必須有一些方法可以做到這一點。無論如何,Message Drven Beans不支持CLIENT_ACKNOWLEDGE

+0

AUTO_ACKNOWLEDGE刪除郵件* *後的onMessage調用成功 – Konstantin

回答

6

我想告訴我的經紀人在發生不良事件時不要從 目標(隊列或主題)中刪除消息。

如果你配置爲使用PERSISTENT消息,在onMessage()任何異常將基於經紀人和目的地設置持續的重新傳遞消息。如果您使用NON_PERSISTENT消息,則onMessage()中的任何異常通常會丟棄該消息。

無論如何,爲什麼消息驅動Bean不支持CLIENT_ACKNOWLEDGE。

消息驅動bean由J2EE容器管理;同樣,容器處理確認。通常,只有獨立的JMS接收器應該使用CLIENT_ACKNOWLEDGE

你正在使用什麼消息傳遞中間件?

+0

這正是我今天發現研究的信息。 :)但是,無論如何,謝謝!我在Glassfish服務器上使用OpenMQ。 –

+0

「onMessage()中的任何異常都會使消息重新傳遞」 - 我應該在onMessage中引發異常嗎?但是我不能因爲onMessage方法被實現而且它不會拋出異常。 –

+0

@NoorSyed這是一個問題,因爲一旦'onMessage()'成功完成,它就會被使用。 – raffian

0

只要確保您使用的是(JTA)交易(默認是您正在使用它們)。然後確保您的應用程序服務器具有重新傳輸設置和/或死信隊列(DLQ)。從您的MDB拋出的任何異常都會觸發重新傳送,並且在發生一定程度的故障後,該消息將被移至DLQ。

的redeilvery設置被稱爲「最大的遞送,企圖」在Wildfly例如