来自端点的Web服务集成

时间:2016-06-14 22:10:08

标签: nservicebus

我需要将第三方WebService集成到基于消息传递的体系结构中。我们正在使用NServiceBus。

在NServiceBus上的PluralSight课程中,建议在集成WebService时,为此集成创建特定的WebService网关端点。

第三方WebService具有用于下拉通知和确认这些通知的API方法。此WebService的客户端需要定期(例如每15分钟)拉一次通知,并在正确处理时确认每个通知。

建议的流程如下:

  1. NServiceBus WebService Gateway端点将根据通知类型提取通知并将消息发送到另一个NServiceBus端点。例如:“新客户通知”意味着将NewCustomer消息发送到另一个NServiceBus端点。 “客户续订”通知意味着发送CustomerUpdated消息等。
  2. 一旦消息传递到另一个端点,我们就必须通过WebService API调用向第三方发出通知。这里的想法是将“AcknowledgeNotification”消息发送到同一个NServiceBus网关端点(self)并由消息处理程序接收。
  3. 请参见此处的图表:Diagram

    我的问题是:

    1. 将AcknowledgeNotification消息从端点发送到同一端点是否有设计气味? (个体)
    2. 我们希望在Azure中托管消息传递基础结构。有关如何托管端点的任何提示,当网关端点需要工作者角色时,会定期提取通知吗?是否可以在一个Azure云服务中托管所有端点,或者更好地在其自己的云服务中托管每个端点?
    3. 干杯

1 个答案:

答案 0 :(得分:2)

问题第1部分

我不认为这是代码味道。我自己已经做过好几次了。这是确保与依赖项的交互成功发生的可靠方法。

我会依赖于被事件驱动的致谢。这将允许您的软件中有更多可扩展的点。例如:CreateCustomer命令将发布CustomerCreated事件。 UpdateCustomer命令会发布CustomerUpdated事件。

您可以让一个处理程序一般处理这两个事件并提交一个acknolwedgement AckHandler: IHandle<CustomerCreated>, IHandle<CustomerUpdate>

但回顾一下你的实际问题,我不相信这是代码味道。

问题第2部分

(下次我建议一起创建一个单独的问题)

至于在Azure中托管,我可能会倾向于在WebJob中托管它们。 WebApp只是一个托管平台,可以托管WebSite和一系列WebJobs。它们更便宜,但控制力更低,但更容易扩展。

请记住,在需要水平扩展之前,可以通过调整每个主机的并发设置来垂直扩展,以找到它可以处理的正确数量的线程(NSB <5最多20个线程; NSB&gt; = 6是100个线程)。

您可以将它们全部合并到一起开始。