0

我们以这种方式将 MassTransit 配置为使用 Azure 服务总线:

                mtConfig.UsingAzureServiceBus((context, busConfig) =>
                {
                    busConfig.Host(new HostSettings
                    {
                        ServiceUri = new Uri(xxx),
                        TokenProvider = TokenProvider.CreateManagedIdentityTokenProvider()
                    });

                    busConfig.ConfigureJsonSerializer(ConfigureJsonSerialization);
                    busConfig.ConfigureJsonDeserializer(ConfigureJsonSerialization);
                    busConfig.ConfigureEndpoints(context);
                });

我们如何为 MassTransit 自动创建的所有订阅设置订阅属性,例如 EnableDeadLetteringOnMessageExpiration?

谢谢,彼得

更新

我已经尝试过(EnableDeadLetteringOnMessageExpiration),但 Azure 服务总线中的订阅未启用死信选项(我们首先删除了所有主题和订阅,以便它们是新创建的):

            mtConfig.UsingAzureServiceBus((context, busConfig) =>
            {
                busConfig.Host(new HostSettings
                {
                    ServiceUri = new Uri(xxx),
                    TokenProvider = TokenProvider.CreateManagedIdentityTokenProvider()
                });

               busConfig.EnableDeadLetteringOnMessageExpiration = true;

               busConfig.ConfigureJsonSerializer(ConfigureJsonSerialization);
               busConfig.ConfigureJsonDeserializer(ConfigureJsonSerialization);
               busConfig.ConfigureEndpoints(context);
            });
4

1 回答 1

0

您可以创建一个实现的类IConfigureReceiveEndpoint(请参阅文档),并在该函数中,对配置器进行模式匹配以查看它是否是 Azure 服务总线并设置属性。在容器中注册后,MassTransit 将对每个端点运行该类。

class ConfigureMyEndpoint :
    IConfigureReceiveEndpoint
{
    public void Configure(string name, IReceiveEndpointConfigurator configurator)
    {
        if(configurator is IServiceBusReceiveEndpointConfigurator sb)
        {
            sb.EnableDeadLetteringOnMessageExpiration = true;
        }
    }
}
于 2021-05-11T12:14:51.667 回答