维护发送.net中的消息顺序
本文关键字:消息 顺序 net 维护 | 更新日期: 2023-09-27 18:18:18
在我的场景中,消息是按照预定义的顺序来的。一旦它进入我们的系统,多个接收器从传入队列中获取消息并处理它。一旦处理完成,处理后的消息应该按照它们到达的顺序发送出去。在一个规模扩大的系统中,我们如何确保这一点?
系统要求较高的处理速度和吞吐量。在。net世界中,哪个队列最适合这个场景?
这是关于有序交付的一个基本问题——在系统的某个地方,您需要将所有内容压缩到单个线程。这是不可避免的。
选择在哪里执行此操作会对吞吐量产生很大影响。您可以选择将整个消息处理器设置为单线程的。这将确保维持秩序,但代价是低吞吐量。
然而,有一种方法仍然可以并发地处理消息,但随后需要以某种方式再次以正确的顺序组装它们。有一个集成设计模式叫做Resequencer - http://eaipatterns.com/Resequencer.html。
然而,resequencer模式依赖于您能够在进入系统的途中用时间戳或序列号标记每个消息,如果您的消息中没有任何指示顺序的内容。
另外,从队列传入的整个消息集的有序传递是一个需求吗?例如,可能只有一些消息需要按顺序传递。或者,您可以将消息分组到一个相关标识符下的"集合"中——在每个集合的顺序中需要维护,但您仍然可以在"每个集合"的基础上进行并发处理。