2014-03-06 104 views
0

我們有一個標記爲已觸發的應用程序MQ隊列和一個已設置的MQTT_FIRST。MQ隊列MQTT_FIRST觸發器創建多個觸發消息

當消息第一次到達該隊列時,隊列管理器創建一條觸發消息並將其寫入我們爲此目的定義的啓動隊列中。 觸發器消息觸發監視進程的執行,該進程將啓動觸發器監視器應用程序,該應用程序將逐個讀取應用程序隊列中的消息。

我們使用Spring JmsTemplate從應用程序隊列中逐一讀取消息。該jmsTemplate實例打開與應用程序隊列的連接,從那裏讀取消息,然後關閉連接。

我們遇到的問題是,如果應用程序隊列中有多條消息,連接關閉時,新的觸發器消息將發送到啓動隊列,這將導致另一個觸發器監視器應用程序(運行在不同的主機上)彈出。這不是我們想要的,因爲對於我們來說,消息序列非常重要的同時只有一個消息消費者處於活動狀態是非常重要的。

我們有多個觸發器監視器應用程序(或消費者)的原因是出於HA原因。

所以我的問題是:有沒有辦法阻止MQ管理器發送多個MQTT_FIRST觸發消息到啓動隊列,並使它只發送一次,當一個消息到達一個空隊列,就是這樣。如果我們真的想要再次發送消息觸發器,我們可以使用Trigger Interval來實現,但是對於我們要實現的目標,不管發生什麼,啓動隊列中都不應該有一個以上的觸發消息。

提前感謝 朱利安

回答

0

我們的問題是,當如果有在應用程序 多個消息排隊一個新的觸發消息將 被髮送到啓動隊列這將連接被關閉導致另一個 觸發器監視器應用程序(運行在不同的主機上)彈出。

是否有辦法防止MQ經理多MQTT_FIRST 觸發消息發送到啓動隊列,使其只有當消息在空隊列時,這是它發送一次 。

是的,請不要關閉連接。使用「先觸發」時需要閱讀規則。其中一條規則是在關閉連接之前使用所有消息。如果你不遵守規則,那麼你不能抱怨。

+0

我不是在抱怨。我正在尋找現有規則背景下的解決方案。 當你在大批量中收到數千條消息時,由於各種原因一次性處理它們是不切實際的:暫停,交易太大等 – Julian

+0

您可能需要重新考慮設計。首先觸發在這種情況下看起來不是正確的解決方案。如果交易規模是一個問題,您可以嘗試深入觸發。 – Umapathy

+0

最簡單的解決方案是大大減少批處理窗口。即不是每6小時一次,而是每小時或每20分鐘運行一次。 – Roger