2

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

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

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

设置 1:

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

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

设置 2:

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

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

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

谢谢!

4

2 回答 2

1

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

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

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

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

于 2013-02-27T17:59:36.627 回答
0

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

于 2013-02-27T20:41:21.523 回答