簡體   English   中英

分布式環境中的消息排序

[英]Message sequencing in Distributed Env

我需要一些指導來解決我目前面臨的問題。 我有一個部署在 8 個 pod 中的微服務,它有一個 JMS 偵聽器,在所有 pod 中啟用以增加並行度。

現在事件正在以不同的順序進行處理,並且無法維持事件處理的順序。 業務要求事件按特定順序處理(事件包含序號,保證順序)。 但是我們需要適當的並行性來在多個 pod 中運行偵聽器。

如果有人對如何設計它有任何建議,請您分享一下嗎? 使用 DB 或 redis 或任何其他組件?

謝謝桑迪普

讓我舉個不同的例子,例如 - Kafka,其中使用分區維護排序,並且所有具有相同上下文(例如:用戶 ID)的消息將 go 到同一個分區。 並行性可以通過可用的分區數來實現。

為了實現類似的功能,JMS 中消息的並行性和排序是相當棘手的。 僅使用一個隊列,您無法同時實現並行和排序。 這可以通過以下方式實現

  • 為同一目的引入更多隊列,區別只是一些后綴。 例如:event_consumer_1、event_consumer_2...等。 如果隊列已經不存在,則將在消費者初始化時創建隊列。

  • 在生產者處對事件消息進行負載均衡,生產者應該擁有可用隊列的所有信息[我們正在使用內部服務發現機制],也許您可以探索服務發現框架以共享可用隊列列表。

  • 在生產者處路由消息,使用公共上下文/組(用戶 ID、事件類型、..取決於您的消息結構),這將確保特定類型的消息將被排序。 就像 userId 的散列一樣,它總是將特定用戶 ID 的消息路由到同一個 Queue 中。

  • 由於所有消費者都有自己的隊列,這也可以幫助您實現並行性

讓我知道是否需要任何具體信息。

暫無
暫無

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

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