C# 基于队列的系统结构

C# 基于队列的系统结构,c#,message-queue,data-exchange,C#,Message Queue,Data Exchange,我有一个由12个windows服务组成的系统,比如a,B。。。M.他们仅通过队列交换信息(本例中为MSMQ)。系统以线性方式工作——外部方调用A,A在B使用的队列上发布消息。比如说,输出的格式是固定的。B读取结果,进行一些处理,并将结果发布到服务C,等等 我现在遇到的问题是,管道中的服务需要上一步没有提供的数据。例如,服务F需要来自BResult的属性 我考虑过几种备选方案,但它们都有缺点: 把以前所有结果的字典传下去。这样说来,F将 能够阅读AResult、BResult等。问题是这将 引入高

我有一个由12个windows服务组成的系统,比如a,B。。。M.他们仅通过队列交换信息(本例中为MSMQ)。系统以线性方式工作——外部方调用A,A在B使用的队列上发布消息。比如说,输出的格式是固定的。B读取结果,进行一些处理,并将结果发布到服务C,等等

我现在遇到的问题是,管道中的服务需要上一步没有提供的数据。例如,服务F需要来自BResult的属性

我考虑过几种备选方案,但它们都有缺点:

  • 把以前所有结果的字典传下去。这样说来,F将 能够阅读AResult、BResult等。问题是这将 引入高耦合,任何地方的任何变化都可能破坏其他 服务

  • 具有不同服务填充的全局God对象。我以前也做过类似的事情,结果非常复杂

  • 维护最有用数据的特殊对象,并将其传递给每个结果。例如,D接收CResult和GlobalContextData并发布DResult和GlobalContextData。问题在于决定将其包含在上下文中并维护它


  • 那么问题是什么?这个问题属于这里吗?这不是编程问题,而是设计问题。在这些服务之间共享数据的好解决方案是什么?队列通常支持发布/订阅,其中一种消息类型可以由多个使用者订阅。看看msmq多播。或者,看看另一个队列服务,例如RabbitMQ,它们有所谓的扇出交换,其中一条消息被传递到多个队列。@RoyalAirForce,Quality Catalyst可能同意so指南的观点,即问题通常应该在实现级别,而不是太广泛或开放。