NServiceBus设计思想
任何具有NServiceBus经验的开发人员/架构师能否在以下方面提供指导和帮助 我们需要在外部托管的应用程序和内部ERP(是的,不止一个)之间创建一个健壮的接口 当第三方应用程序中发生某些活动时,他们将向我们发送消息。i、 e.调用web服务,在消息中传递各种信息字段等。我们无法控制,也无法更改此第三方应用程序 我的职责是创建这个web服务,并将消息处理到每个ERP中。第三方决定web服务的外观,但不是它负责什么。我们必须承认,如果他们得到了“成功”的回复,那么我们在这一点上已经为这一信息承担了责任!i、 e.我们需要确保尽可能完美地避免数据丢失 这就是我对使用NServiceBus感兴趣的地方。首先使用它来存储/接受消息。在这一点上,我迷路了,我不知道应该发生什么,也就是说,接下来是什么设计。是否有另一台机器(进程)订阅并获取消息以将其处理到ERP中,如果是,因为每个ERP集成逻辑不同,我是否为每个ERP创建订阅者?然而,一封邮件可能有两个目标ERP,因此最好发送邮件而不订阅 显然,在整个设计中,我需要一些业务规则来帮助确定目标ERP,然后是确定每个ERP中实际发生的事情的业务规则。因此,我也有一个关于BRE的问题,但这可以等待,虽然仍然可能是一个驱动程序的消息要做什么 因此: 第三方>web服务呼叫>存储消息(&return success)>确定目标ERP>将每个ERP处理为ERP>标记消息完成 如果线路出现任何故障,请确保信息不会丢失。p、 由于整个机器可能会死亡,MSMQ如何防止损失?这只是磁盘弹性等吗NServiceBus设计思想,nservicebus,Nservicebus,任何具有NServiceBus经验的开发人员/架构师能否在以下方面提供指导和帮助 我们需要在外部托管的应用程序和内部ERP(是的,不止一个)之间创建一个健壮的接口 当第三方应用程序中发生某些活动时,他们将向我们发送消息。i、 e.调用web服务,在消息中传递各种信息字段等。我们无法控制,也无法更改此第三方应用程序 我的职责是创建这个web服务,并将消息处理到每个ERP中。第三方决定web服务的外观,但不是它负责什么。我们必须承认,如果他们得到了“成功”的回复,那么我们在这一点上已经为这一信息承担
非常感谢您阅读了更多的书籍,并获得了更多的建议。这听起来是一个完美的NServiceBus应用程序 您的web服务应该只解析来自第三方的请求并将其转换为NServiceBus消息,它应该
Bus.Send()
。在消息到达总线上之前,您不会使用200状态代码进行响应,此时,您要对此负责,而NServiceBus内置的错误/重试和错误队列功能将成为您最好的朋友
此消息应该由另一个端点接收,但它需要能够解释重复的消息或使用幂等性,这样重复就不会成为问题。如果第三方点击了您的web服务,并且消息成功地放置在总线上,但是由于某些错误,他们无法接收200响应代码,您将从他们那里获得重复的消息
此时,接收MessageFromWebServiceCommand消息的端点可以Bus.Publish()
包含命令数据的SomeBusinessEventHappendEvent
对于每个ERP,创建一个订阅SomeBusinessEventHappenedEvent的附加端点,并使用您的业务逻辑来决定对该ERP执行哪些操作。在某些情况下,“某物”可能是“无”。这里也要记住幂等性,因为如果消息失败,它将重试
由于NServiceBus和MSMQ对此类问题具有天生的弹性,您担心的所有其他事情(防止消息丢失,如果机器死机会发生什么情况)都将得到解决
下面是一篇博文,包括一个示例项目,展示了如何通过web服务接收来自外部合作伙伴的消息,并使用NServiceBus进行处理,以及直接指向GitHub上示例项目的链接: