2013-02-27 63 views
2

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

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

我见过如何配置WCF服务来处理pub/sub设置中的nservicebus消息。我不确定的是建立它的最佳方式是什么。

设置1:

客户端(出版商) - > NServiceBus处理程序(用户) - > WCF服务

在这种情况下,再创你会增加处理器的数量(托管nservicebus服务?) ,只保留一个WCF服务。

设置2:

客户端(出版商) - > WCF服务(用户)

这一个你刚刚增加的WCF服务的数量规模(更新将是一场噩梦)。

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

谢谢!

回答

1

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

从它的声音中,您还希望服务充当处理发送电子邮件请求的单个逻辑端点。如果是这样的话,你会想用Send(一个命令)而不是Publish(一个事件)。发布用于广播一个事件,这意味着已经发生了;发送用于指示另一个组件做些什么。这听起来像你想要后者。

可通过Distributor完成端点的缩放。这可能会或可能不会有用,具体取决于您期望的瓶颈位置。

编辑:根据您的评论,我会简单地去第二个设置,只需将处理程序添加到WCF服务。如果您在IIS中托管WCF,请确保在应用程序池回收(即将传入的消息不会以与传入的WCF请求相同的方式将其唤醒时)唤醒该进程。

+0

所有现有的逻辑都在WCF服务中。计划是分阶段完成这项工作,将WCF服务作为最终端点,以便我们尚未转换的应用程序仍然可以使用它,如果需要更新,我们只需要在一个代码库中进行更新。将逻辑移至NServiceBus流程确实有意义,并且是一种选择。 – 2013-02-27 18:09:42

+0

更新了我的答案。 – 2013-02-27 18:50:44

+1

@RussellDurham我建议只从你的NServiceBus处理程序调用进程中的WCF代码。 – 2013-03-01 14:44:07

0

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