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

Sharing message definitions between NServiceBus services

富有想象力的设置

研究

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

我想,共享项目可以提取到单独的存储库中,然后作为 DLL 或自定义 NuGet 包从其他存储库中引用。但是在开发过程中造成了很多困难,感觉不太对。

在这个样本http://docs.particular.net/samples/step-by-step/中,甚至还有一条注释说:

Storing all message definitions in a single location is not a best practice, but serves to illustrate how things work for this simple example.

但是我还没有找到最佳做法。

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

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

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

在 Sales.InternalMessages 和(我们暂时称之为)Sales.Contracts.

之间进一步划分消息也很聪明

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

然后,Sales.Contracts 将只包含服务外的那些消息。将它们命名为 "Contracts" 提醒您这就是它们 - 服务之间的契约 - 因此您需要这样管理它们。这意味着对它们的更改也需要仔细考虑和版本控制。