NServiceBus,WCF架构

时间:2013-02-27 17:44:54

标签: wcf architecture nservicebus

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

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

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

设置1:

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

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

设置2:

客户(发布商) - > WCF服务(订户)

这个你只需要增加WCF服务的数量(更新将是一场噩梦)。

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

谢谢!

2 个答案:

答案 0 :(得分:1)

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

从它的声音来看,您还希望服务充当处理发送电子邮件请求的单个逻辑端点。如果是这种情况,您将需要使用发送(命令)而不是发布(事件)。发布用于广播事件,这意味着已发生事件;发送用于指示其他组件执行某些操作。听起来你想要后者。

可以通过Distributor缩放端点。根据您预计瓶颈的位置,这可能有用也可能没用。

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

答案 1 :(得分:0)

我们在内部执行类似操作,其中一个NSB端点处理所有电子邮件发送。客户端可以直接使用NSB到Bus.Send()命令来向电子邮件端点发送消息,也可以通过WCF公开该端点(仅用于将命令传递到端点)。一旦端点具有命令,他们就会调用现有服务以保持与现有客户端的兼容性。