所以我正在考虑在我们当前的设置中实现NServiceBus,并试图更好地理解应该如何设置。
我们当前的设置包括多个客户端(网站,计划任务等),调用我们为处理电子邮件发送而设置的WCF服务。当然,如果服务中断,那么我们的客户就会开始收到错误,然后所有这些消息都会丢失(我们想要ESB的原因之一)。
我已经了解了如何配置WCF服务以在pub / sub设置中处理nservicebus消息。我不确定的是设置它的最佳方法是什么。
设置1:
客户(发布商) - > NServiceBus处理程序(订阅者) - > WCF服务
在这种情况下,为了扩展,您需要增加处理程序的数量(托管的nservicebus服务?),只保留一个WCF服务。
设置2:
客户(发布商) - > WCF服务(订户)
这个你只需要增加WCF服务的数量(更新将是一场噩梦)。
我刚刚开始研究ESB架构,所以如果我完全关闭,请告诉我。我本质上只是想知道什么对你有用,以及“最佳实践”往往是什么。
谢谢!
答案 0 :(得分:1)
如果您通过NServiceBus实现此功能,我还不完全清楚您需要什么WCF。除了从多个客户端接收消息(发送电子邮件)之外,是否还需要WCF组件?如果没有,您可以从等式中删除WCF。
从它的声音来看,您还希望服务充当处理发送电子邮件请求的单个逻辑端点。如果是这种情况,您将需要使用发送(命令)而不是发布(事件)。发布用于广播事件,这意味着已发生事件;发送用于指示其他组件执行某些操作。听起来你想要后者。
可以通过Distributor缩放端点。根据您预计瓶颈的位置,这可能有用也可能没用。
编辑:根据您的评论,我只需要进行第二次设置,只需将处理程序添加到WCF服务即可。如果您在IIS中托管WCF,请确保在应用程序池回收时有一些东西可以唤醒进程(传入的消息不会像传入WCF的请求那样将其唤醒)。
答案 1 :(得分:0)
我们在内部执行类似操作,其中一个NSB端点处理所有电子邮件发送。客户端可以直接使用NSB到Bus.Send()命令来向电子邮件端点发送消息,也可以通过WCF公开该端点(仅用于将命令传递到端点)。一旦端点具有命令,他们就会调用现有服务以保持与现有客户端的兼容性。