【发布时间】: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