如何为masstrtransit中的订阅和队列设置默认命名约定?



目前,我们被绑定到本地和测试环境的单个Azure服务总线实例(我更喜欢不同的设置,但这不是由我决定)。以前我们使用的是自定义框架,它为每个主题创建一个订阅,该订阅的名称是服务名称的混合,如果项目是由开发人员在他的机器上运行的,它会附加一个"本地名称";以避免所有开发本地计算机和服务器实例争用同一消息。例如,对于ShoppingService它为服务器实例创建了一个名为ShoppingService的订阅在Joe的本地机器中它创建了一个名为ShoppingService- joecomputer的订阅。现在我们正在尝试从这个自定义框架切换到MassTransit,因为我们喜欢它提供的额外功能(也因为老实说,自定义框架比我们愿意承认的更多的bug)。我们按照Patterson发布的视频来创建命令、事件和消费者,所有的东西都按照描述工作:

masstrtransit -使用Azure服务总线

然而,我们现在正面临我之前提到的竞争问题。为了解决这个问题,我们将尝试设置我们目前使用的自定义命名约定所以我的问题是:

  1. 是否有办法修改MassTransit使用的默认命名约定?我们希望将其大部分保留在基于命令类型名称创建主题的地方,但我们希望在转发订阅和队列中添加后缀。换句话说,如果我们讨论视频中描述的提交订单命令我们希望订阅名称为"submit-order-joe"队列名称为submit-order- join;如果它在乔的机器上运行。我们可以为每个消费者/客户端/发布者手动设置配置,但如果我们能"全局"设置就更好了。

  2. 使用默认约定,如果有两个名为"namespaceOne.SubmitOrder"one_answers"namespaceTwo.SubmitOrder" ?根据我们所看到的,它将创建两个不同的主题,但这两个订阅都称为"提交-订单"。两者都将消息转发到名为"submit-order"的同一队列。这会让人感到困惑,我甚至不知道MassTransit是否会正确地使用这些命令。

在MassTransit中有两种命名约定。实体名称(基于消息类型,是Azure服务总线中的主题)和端点名称(基于消费者、事件或活动类型,是ASB中的队列)。

您可以指定您自己的实体名称格式化程序来自定义实体名称格式,或者您可以覆盖特定的消息。

您还可以指定您自己的端点名称格式化程序,如本视频所述,以自定义为接收端点生成的队列名称。或者您可以创建一个内置格式化程序的实例,指定不同的构造函数参数来包含前缀、包含命名空间等。

最新更新