【问题标题】:NServiceBus, WCF ArchitectureNServiceBus,WCF 架构
【发布时间】:2013-02-13 15:38:51
【问题描述】:

所以我正在考虑在我们当前的设置中实现 NServiceBus,并试图更好地了解应该如何设置。

我们当前的设置由多个客户端(网站、计划任务等)组成,它们调用我们为处理电子邮件发送而设置的 WCF 服务。当然,如果服务出现故障,我们的客户就会开始收到错误,然后所有这些消息都会丢失(我们想要 ESB 的原因之一)。

我已经了解了如何配置 WCF 服务以在 pub/sub 设置中处理 nservicebus 消息。我不确定设置它的最佳方法是什么。

设置 1:

客户端(发布者)-> NServiceBus 处理程序(订阅者)-> WCF 服务

在这种情况下,为了扩展,您需要增加处理程序的数量(托管 nservicebus 服务?),只保留一个 WCF 服务。

设置 2:

客户端(发布者)-> WCF 服务(订阅者)

您只需增加 WCF 服务的数量以进行扩展(更新将是一场噩梦)。

我刚开始研究一般的 ESB 架构,所以如果我完全不了解,请告诉我。我基本上只是想知道什么对你有用,以及“最佳实践”往往是什么。

谢谢!

【问题讨论】:

    标签: wcf architecture nservicebus


    【解决方案1】:

    如果您通过 NServiceBus 实现此功能,我不再完全清楚您需要 WCF 做什么。除了从多个客户端接收消息(发送电子邮件)之外,是否需要 WCF 组件?如果没有,您可以从等式中删除 WCF。

    听起来,您还希望服务充当处理发送电子邮件请求的单个逻辑端点。如果是这种情况,您将需要使用 Send(命令)而不是 Publish(事件)。 Publish 用于广播事件,这意味着某事已经发生; Send 用于指示另一个组件做某事。听起来你想要后者。

    端点的缩放可以通过Distributor 完成。这可能有用也可能没用,具体取决于您预期的瓶颈位置。

    编辑:根据您的评论,我将简单地进行第二个设置,并将处理程序添加到 WCF 服务。如果您在 IIS 中托管 WCF,请确保在应用程序池回收时您有一些东西可以唤醒进程(传入消息不会像传入 WCF 的请求那样唤醒它)。

    【讨论】:

    • 所有现有逻辑都在 WCF 服务中。计划是分阶段执行此操作,将 WCF 服务作为最终端点,以便我们尚未转换的应用程序仍然可以使用它,如果需要任何更新,我们只需在一个代码库中进行更新。将逻辑移至 NServiceBus 进程确实有意义,并且是一种选择。
    • @RussellDurham 我建议只从您的 NServiceBus 处理程序中调用 WCF 代码。
    【解决方案2】:

    我们在内部做类似的事情,其中​​一个 NSB 端点处理所有电子邮件的发送。客户端可以直接使用 NSB 到 Bus.Send() 命令以将消息发送到电子邮件端点,或者您也可以通过 WCF 公开该端点(仅将命令传递到端点)。一旦端点拥有命令,它们就会调用您现有的服务以保持与现有客户端的兼容性。

    【讨论】:

      猜你喜欢
      • 2010-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-19
      • 1970-01-01
      相关资源
      最近更新 更多