簡體   English   中英

如何在接收器類中使用選擇器過濾JMS消息

[英]How to filter JMS message using selector in receiver class

我想從隊列中使用超過3分鍾的消息。

以下是我的消費類。 如何在選擇器中定義條件。

@Async
@JmsListener(destination = "jms/xyz" ,containerFactory = "xyzfactory", selector = "JMSTimestamp= 'morethan 3 minuts'")
public void xyzRecive(Message message) throws JMSException {

}

選擇器必須是這樣的:

"JMSTimestamp > " + (System.currentTimeMillis() + 180000);

但是,選擇器是在基礎JMS使用者創建時設置的,並且是不可變的,因此,由於時間總是在向前發展,因此該選擇器將迅速“過時”增長。 要更改選擇器,將需要關閉現有使用者並使用新選擇器創建一個新使用者。 顯然,在這種情況下,Spring正在處理使用者的創建並設置選擇器,因此您要么需要刪除Spring而是自己使用JMS API(這並不困難)。

另一種可能的解決方案是將消息的生存時間設置為3分鍾,並在您正在使用的任何代理上定義一個到期隊列,並從該到期隊列而不是主隊列中定義消耗量,因為到期后的所有消息隊列將被保證在主隊列上至少3分鍾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM