gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:47:44 25 4
gpt4 key购买 nike

富有想象力的设置

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

研究

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

我想,共享项目可以提取到单独的存储库中,然后作为 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 包发布到私有(private)存储库。

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

在 Sales.InternalMessages 和(我们暂时称之为)Sales.Contracts 之间进一步划分消息也是明智的。

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

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

关于c# - 在 NServiceBus 服务之间共享消息定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38852404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com