我有被訂閱,它發送其內容最終被持久化到數據庫消息的主題的MDB。消息驅動Bean和消息的消費秩序
我知道MDB是合併的,因此容器能夠並行處理多個傳入消息。就我而言,在這些消息被消耗(並堅持)的順序是非常重要的。我不想一個MDB實例池以不同的順序消耗,然後堅持的消息,因爲他們得到了出版的JMS話題。
可這是一個問題?如果是這樣,有沒有告訴容器使用消息時要遵循嚴格的進貨訂單的一種方式?
我有被訂閱,它發送其內容最終被持久化到數據庫消息的主題的MDB。消息驅動Bean和消息的消費秩序
我知道MDB是合併的,因此容器能夠並行處理多個傳入消息。就我而言,在這些消息被消耗(並堅持)的順序是非常重要的。我不想一個MDB實例池以不同的順序消耗,然後堅持的消息,因爲他們得到了出版的JMS話題。
可這是一個問題?如果是這樣,有沒有告訴容器使用消息時要遵循嚴格的進貨訂單的一種方式?
複製到確保收到順序相匹配,其中客戶端發送消息的順序,必須做到以下幾點:
設定最高豆式無池到1爲MDB。這確保了MDB是消息的唯一使用者。
如果您的MDB部署在羣集上,請將它們部署到羣集中的單個節點[...]。
您應該能夠將MDB池的大小限制爲1,從而確保以正確的順序處理消息。
當然,如果你仍然需要一些並行性,那麼你有幾個選項,但這取決於數據。
如果某些消息具有某些共同點,並且處理順序僅在該組消息中具有共同的值,那麼您可能需要擁有多個主題或使用隊列和線程池。
另一方面,如果與消息到達相關的邏輯的某些部分可以並行發生,而其他位不能,那麼您需要將邏輯分成並行 - 並行和並行不正確的部分,並相應地處理這些位。