2014-03-14 23 views
-1

我需要創建一個應用程序,其中必須在給定的時間限制內檢索JMS隊列中的所有元素。檢索特定時間內的JMS隊列中的內容

例如,給定的限制是10秒。因此,每隔10秒,應用程序應創建一個新的Thread,其中Thread負責1)連接到JMS隊列,2)在連接期間檢索所有消息。

因此,在10秒內,可以說隊列中有15個TextMessage s。我只想要當前正在執行的線程檢索那些15 TextMessages而沒有其他東西。恐怕線程會收到額外的消息。

是否有限制消費者可以使用多少消息的設施?也許有什麼功能可以讓我看看隊列包含多少?

回答

0

我能想到的一種方法是,您從使用CLIENT_ACKNOWLEDGE確認模式的會話創建接收器。現在啓動接收器並接收消息。是的,你會收到一些額外的消息。現在,當你收到一條消息,得到它JMSTimestamp,看看它是否屬於你的線程感興趣的持續時間。如果消息是按照你的時間要求確認的。如果不確認,在這種情況下,它將持續存在於服務器上,並且可能被其他線程拿起來尋找具有不同時間戳的消息。

另一種有效的方法是使用消息選擇器。由於JMSTimestamp是一個消息頭,可以在選擇器中使用,因此您可以利用它。使用您的時間範圍要求在JMSTimestamp上創建帶有選擇器的接收器。只有收到滿足選擇器的消息。