在NServiceBus服务之间共享消息定义

Ale*_*sov 9 c# nservicebus

富有想象力的设置

  • 几项服务
  • 每个人都住在自己的存储库中
  • 每个都单独开发
  • 每个都单独部署
  • 他们想通过NServiceBus进行通信

研究

NServiceBus基础知识的示例显示了作为同一解决方案一部分的多个应用程序如何使用另一个共享库项目共享消息定义,它们都引用它们.在这里,如果服务不是同一解决方案的一部分,事情会变得复杂.

我想,共享项目可以被提取到一个单独的存储库中,然后作为DLL或自定义NuGet包从其他存储库中引用.但它在开发过程中会产生很多困难,并且感觉不对.

在这个示例http://docs.particular.net/samples/step-by-step/中,甚至有一条说明:

将所有消息定义存储在单个位置不是最佳实践,但可用于说明此简单示例的工作原理.

但是我还没有找到最佳实践.

问题:如何以正确的方式在服务之间共享消息定义?

Dav*_*ike 10

你富有想象力的设置很好.但是,每个服务都可以拥有自己的消息程序集,而不是拥有一个共享消息程序集,然后将其作为NuGet程序包发布到专用存储库.

因此,如果您拥有Sales服务(例如,在Sales存储库中),还将包含Sales.Messages项目.它是最基本的形式,它包含Sales服务处理的所有命令的定义,以及Sales服务发布的所有事件的定义.

在Sales.InternalMessages和(我们现在只调用它)Sales.Contracts之间进一步划分消息也是明智的.

内部消息只是在您的服务中被抛出的消息.与私有方法一样,您不希望其他团队能够从您的服务外部调用那些,因此您不会将这些消息作为NuGet包在外部分发.

然后,Sales.Contracts将仅包含那些超出服务的消息.将它们命名为"合同"会提醒您它们是什么 - 服务之间的合同 - 因此您需要对它们进行管理.这意味着需要仔细考虑和版本化对它们的更改.