富有想象力的设置
研究
NServiceBus基础知识的示例显示了作为同一解决方案一部分的多个应用程序如何使用另一个共享库项目共享消息定义,它们都引用它们。在这里,如果服务不是同一解决方案的一部分,事情会变得复杂。
我想,共享项目可以被提取到一个单独的存储库中,然后作为DLL或自定义NuGet包从其他存储库中引用。但它在开发过程中会产生很多困难,并且感觉不对。
在此示例http://docs.particular.net/samples/step-by-step/中,甚至还有一条说明:
将所有消息定义存储在一个位置并不是最好的 练习,但用于说明事情如何运作这么简单 示例
但是我还没有找到最佳做法。
问题:如何以正确的方式在服务之间共享消息定义?
答案 0 :(得分:10)
你富有想象力的设置很好。但是,每个服务都可以拥有自己的消息程序集,而不是拥有一个共享消息程序集,然后将其作为NuGet程序包发布到私有存储库。
因此,如果您拥有Sales服务,例如,在Sales资源库中,还将包含Sales.Messages项目。它是最基本的形式,它包含Sales服务处理的所有命令的定义,以及Sales服务发布的所有事件的定义。
在Sales.InternalMessages和(现在只是调用它)Sales.Contracts之间进一步划分消息也很聪明。
内部消息只是在您的服务中被抛出的消息。与私有方法一样,您不希望其他团队能够从您的服务之外调用那些,因此您不会将这些消息作为NuGet包在外部分发。
然后,Sales.Contracts将仅包含那些超出服务范围的消息。命名他们"合同"提醒你他们是什么 - 服务之间的合同 - 因此你需要管理它们。这意味着需要仔细考虑和版本化对它们的更改。