[英]JMS Timeout or TimeToLive
我對Java EE和JMS相當陌生,並且正在考慮使用JMS進行實現。
考慮以下情形:
腳本
用戶點擊一個servlet。 然后將一條消息從此servlet放入JMS服務器/隊列中。 然后將響應發送回給用戶,說“消息已排隊”。
選項1
使用者/ MDB從JMS隊列接收消息並進行處理。 這是正常操作,很標准。
選項2
沒有消費者(無論出於何種原因),或者接收方處理消息的速度太慢。 因此,我希望隊列中的消息超時。 一旦超時,應發送電子郵件等(以電子郵件為例)。
閱讀我在QueuSender類中找到的API規范/ Java EE 6教程
void send(Message message, int deliveryMode, int priority, long timeToLive)
因此,通過設置timeToLive消息將從隊列中逐出。 問題在於,沒有“接口/回叫”來知道消息已被逐出。 它只是消失了。 還是我弄錯了?
我想到的另一種方法是讓線程監視隊列並逐出“過期”的消息並將其從隊列中拉出。 但我認為這不可能嗎?
對此問題的任何見解將不勝感激。
您必須使用一些特定於實現的功能才能滿足您的要求。 JMS規范既沒有定義超時消息采取的動作,也沒有為您從隊列中輪詢消息時提供任何合理的條件選擇。
但是,大多數(如果不是全部)JMS實現確實提供了DLQ(死信隊列)的概念。 如果無法將消息傳遞給常規使用者或超時,則JMS實現將很可能將消息移至DLQ,而DLQ基本上也是具有自己的偵聽器的常規隊列。
因此,如果您設置兩個隊列Q1和Q2並將Q2配置為Q1的DLQ,則將在Q1上的偵聽器中進行常規請求處理,並為Q2實現一個附加的偵聽器以執行錯誤/超時處理。
通過JMS進行同步交互也可能對您有所幫助。 基本上在客戶端上,您:
另一方面,服務器:
因此,在客戶端,您始終可以確定所發送的消息發生了什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.