【问题标题】:Microservice and processing received messages sequentially微服务并按顺序处理收到的消息
【发布时间】:2020-03-09 08:25:08
【问题描述】:

我有一个有 N 个实例的微服务系统,我的业务基于 OrderId 唯一值。对于每个 OrderId,我收到 4 条消息,第一条消息需要很长时间处理,在处理第一条消息期间,我收到第二条消息和其他消息。我想强制系统按顺序处理它们。你对这个场景有什么想法?

我对这个场景的想法包含共享内存技术(缓存服务器)和hangfire(使用BackgroundJob.ContinueWith),但我正在寻找最佳实践。

【问题讨论】:

  • 暂停侦听器,直到第一个 msg 完成处理,然后接听其他 3 个。
  • @RandomUs1r,我每秒收到 1000 条消息 (250 OrderId),我不能只为 OrderId 暂停监听器。
  • @Nigje 似乎在问题主体中值得一提。你有没有研究过幂等操作>c-sharpcorner.com/article/…。例如,当您提出缓存时,您的其他消息将检查并等待第一条消息完成。另一个想法是使用线程,这看起来很像你的hangfire想法。您没有想到的一个想法可能是使用响应式扩展 (RX)。

标签: c# .net-core microservices message-queue hangfire


【解决方案1】:

在 Kafka 等标准消息传递解决方案中,您可以使用 orderId 作为分区键。这将确保具有相同 orderId 的所有消息将始终按照它们产生的顺序在同一个分区中结束。不同的订单会去不同的分区。

【讨论】:

  • 您好,感谢您的回答。我的总线基于 RabbitMq。我正在寻找第三方来处理这个问题。
猜你喜欢
  • 2012-12-26
  • 1970-01-01
  • 2019-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-09
  • 2015-02-17
相关资源
最近更新 更多