我有一個系統,讀出從IBM MQ消息。從這個隊列中,我們有時會得到損壞的數據。如果下一次讀取消息失敗,監聽器將等待5分鐘,然後再繼續。當一條消息失敗3次後,它將被放在退避隊列中。 JMSContainerFacotry設置爲並行運行最大值10。這意味着如果我們收到大量損壞的消息,這些消息每次需要10分鐘以上才能到達退避隊列(這是正常的),但它們最終消耗了所有線程,因此其他消息必須等待所有損壞到達在處理之前退避隊列。我想從監聽器中刪除wait(),這樣就不會阻塞線程,但失敗的消息在彈出備份之前仍然會等待5分鐘。消息重新傳遞IBM MQ
我知道,和ActiveMQ你可以告訴隊列再次彈出相同的消息,與IBM MQ我沒有這種可能性之前要等待5分鐘。是否有可能將失敗的消息放在隊列後面?現在失敗的消息似乎在新的消息面前流行起來。或者將失敗消息上的jmspriority設置得更低。因此,如果有消息還沒有失敗,會在隊列失敗之前從隊列中彈出?
我的聽衆是大約如此:
@JMSListener()
public void listen(Object message) {
TextMessage textMessage = (TextMessage) message;
if (textMessage.getIntProperty("JMSXDeliveryCount") > 1) {
//pause for 5 minutes
}
//buisness logic
}
的在隊列是IBM MQ。 AS是Jboss的6
因爲我們'重新講了很多其他的應用,如果他們中的一個重新部署,我們會得到一個錯誤,並希望稍後再試。 我們沒有收到很多壞消息,但是有幾次我們收到了大量重複的消息。然後全部失敗,因爲ID已經存在於數據庫中。 – user1764597
但是,爲什麼不簡單地處理這個'壞'的消息,並繼續消費下一個? –