在我的场景中,消息以预定义的顺序出现。一旦它进入我们的系统,多个接收器从传入队列中获取消息并对其进行处理。处理完成后,处理后的消息应按照它们到达时的顺序发送出去。在扩大规模的系统中,我们如何确保这一点?
系统需要高处理速度和吞吐量。在.net世界中,哪个队列对于这种情况是理想的?
答案 0 :(得分:3)
这是订购交付的一个基本问题 - 在您的系统中的某个地方,您需要将所有内容限制为单个线程。这是不可避免的。
您选择这样做会对吞吐量产生很大影响。您可以选择使整个消息处理器单线程化。这将确保维持订单,但代价是低吞吐量。
但是,有一种方法可以同时处理消息,但是你需要以某种方式再次以正确的顺序组装它们。有一种称为Resequencer的集成设计模式 - http://eaipatterns.com/Resequencer.html。
然而,如果您的消息中没有任何内容表示订购,则重定序器模式依赖于您能够在进入系统的路上为每条消息标记时间戳或序列号。
此外,还是从队列中输入的整个消息集中订购了一个需求吗?例如,可能只有部分消息需要按顺序传递。
或者可能是您可以将消息分组到相关标识符下的“集合”中 - 在每个集合顺序中需要维护,但您仍然可以在“每个集合”的基础上进行并发处理。