推荐用于发布客户端事件的消息总线体系

时间:2011-09-08 22:30:57

标签: winforms msmq messaging nservicebus esb

以下方案的推荐消息传递体系结构是什么:

  • 运行WinForms客户端的多个工作站
  • 客户端必须可靠地通知事件的两个(或更多)Windows服务

最初我们想避免在客户端工作站上配置MSMQ,因此我们创建了一个Web服务。事实证明这很难配置,然后我读到从Web应用程序发布NServiceBus消息是not recommended

最佳做法是:

  • 让客户端调用Web服务,该服务向Windows服务发送(不发布)消息,该服务会发布消息吗?
  • 直接从客户端应用程序发送(不发布)消息到服务器上的远程队列,Windows服务从该服务器发布消息?
  • 其他?

目前我正在尝试使用NServiceBus实现这一点,但希望答案与总线无关。

修改

如果客户端只是发送(不发布)到远程队列,是否需要在客户端工作站上配置(甚至安装)MSMQ?在那种情况下,如果远程队列无法访问会发生什么?

2 个答案:

答案 0 :(得分:1)

我认为客户应该直接向服务器发送消息,如同您的选择2所示。虽然您必须在客户端工作站上配置msmq。你为什么不想这样做?

这具有端到端耐用性的好处。

我注意到你谈到发送和发布,但是我在你的场景中看不到任何保证使用NSB pub-sub的内容。

仅供参考,发送到远程队列并从本地队列中读取几乎总是最好的。

答案 1 :(得分:1)

您可以将NServiceBus端点公开为WCF服务。

NServiceBus and WCF页面的底部:

public class MyService : NServiceBus.WcfService<MyCommand, MyErrorCodes>
{
    ...
}

看看那个。您应该能够让客户端应用程序连接到WCF服务以丢弃消息。您可以使用http,net.tcp或任何WCF传输为您配置WCF服务。

此服务将不是Web应用程序,即使它使用HTTP传输(尽管您可能必须选择非标准端口)。它将是一个公开Web服务接口的Windows服务。从这里发布消息会很好。这使您可以自由地在所有客户端上配置MSMQ,但仍然有很多NServiceBus的易用性和灵活性。

当然,如果担心此服务的可伸缩性,您可能希望拥有一个带有负载平衡的IIS托管Web服务。在这种情况下,创建一个普通的WCF Web服务,该服务将消息发送到作为Windows服务安装的NServiceBus.Host.exe端点,然后从该Windows服务发布事件。