在RabbitMQ传输的临时队列名称中使用程序集名称

时间:2019-06-08 13:46:34

标签: masstransit

我们迁移到.NET Core,并使用dotnet CLI运行了一系列服务。迁移之后,我们所有的临时队列都被命名为<hostname>_dotnet_bus...

这有点烦人,因为要弄清楚一些错误和跳过的消息来自哪个服务是很困难的。

我认为,有两种选择:

  1. 提供一种通过Configurator界面覆盖默认行为的方法。
  2. 更改面向.NET Standard的默认行为。

第二个选项非常简单,这是我当前的本地构建方法:

https://github.com/MassTransit/MassTransit/commit/16b884cf6abd08eb8f699667a22fc5e7542bba77

这是否应视为问题并在MassTransit的Github问题跟踪器上提出?有想法吗?

1 个答案:

答案 0 :(得分:2)

我认为端点定义应该可以解决问题。

class YourAssemblyEndpointDefinition :
    DefaultEndpointDefinition
{
    public HubEndpointDefinition()
        : base(true)
    {
    }

    public override string GetEndpointName(IEndpointNameFormatter formatter)
    {
        return formatter.TemporaryEndpoint($"{typeof(YourType).Assembly.GetName()}");
    }
}

然后您可以像下面这样在端点注册中使用它:

configurator.ReceiveEndpoint(new YourAssemblyEndpointDefinition(), ...)

您可以在这里看到它的使用情况:https://github.com/MassTransit/MassTransit/blob/develop/src/MassTransit.SignalR/MassTransitSignalRConfigurationExtensions.cs

已更新

如果要为req / resp自定义总线名称,则可以使用此替代:

return Bus.Factory.CreateUsingRabbitMq(cfg =>
{
    cfg.OverrideDefaultBusEndpointQueueName("your_assembly_name")

    // your other config
});