【问题标题】:MassTransit and Azure Service Bus: EnableDeadLetteringOnMessageExpiration for all created subscriptionsMassTransit 和 Azure 服务总线:所有已创建订阅的 EnableDeadLetteringOnMessageExpiration
【发布时间】:2021-08-01 18:39:51
【问题描述】:

我们将 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);
            });

【问题讨论】:

    标签: .net-core azureservicebus masstransit dead-letter azure-servicebus-subscriptions


    【解决方案1】:

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

    class ConfigureMyEndpoint :
        IConfigureReceiveEndpoint
    {
        public void Configure(string name, IReceiveEndpointConfigurator configurator)
        {
            if(configurator is IServiceBusReceiveEndpointConfigurator sb)
            {
                sb.EnableDeadLetteringOnMessageExpiration = true;
            }
        }
    }
    

    【讨论】:

    • 好的,谢谢,我会试试看。任何想法,为什么设置 EnableDeadLetteringOnMessageExpiration = true 不起作用(请参阅我更新的问题)?
    • 如果队列已经存在,它不会改变值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 2016-12-29
    • 1970-01-01
    相关资源
    最近更新 更多