【问题标题】:MassTransit + Azure Service Bus: Default TTL configuration for topics and other questionsMassTransit + Azure 服务总线:主题和其他问题的默认 TTL 配置
【发布时间】:2021-02-15 18:58:00
【问题描述】:

首先,对不起,我的英语很糟糕。我将 MassTransit 与 Azure 服务总线一起用于微服务之间的异步通信。我对 masstransit 和 azure service bus 的默认配置有一些疑问,但我无法在文档中澄清它们。这些疑点如下:

  • 有没有办法为所有队列和主题设置默认 TTL?队列和主题的大小?文档指定当接收者连接/创建时可以调整 TTL 和队列的大小,但另一方面,关于主题,指定了如果消费者连接到特定主题,如何调整 TTL,但是在这种情况下,我们的消费者不订阅特定主题,而只是订阅一个 messageType,其余的由 Masstransit 完成(创建主题、订阅者并将消息从订阅者转发到消费者的队列)。

  • 另一方面,PrefetchCount 和 MaxConcurrentCalls 的默认值是多少? 考虑到消费者具有水平扩展(竞争消费者),以及获得最高性能的一些最佳值?从我在其他问题中读到的内容来看,PrefetchCount 和 MaxConcurrentCalls 值必须彼此接近才能优化性能,对吗?

非常感谢。

问候

【问题讨论】:

    标签: .net-core microservices azureservicebus azure-aks masstransit


    【解决方案1】:

    所有 Azure 服务总线实体的默认值都在 this file 中,并且可以在创建总线之前进行调整。

    默认值包括(已编辑):

    namespace MassTransit.Azure.ServiceBus.Core
    {
        public static class Defaults
        {
            public static TimeSpan LockDuration = TimeSpan.FromMinutes(5);
            public static TimeSpan DefaultMessageTimeToLive = TimeSpan.FromDays(365 + 1);
            public static TimeSpan BasicMessageTimeToLive = TimeSpan.FromDays(14);
    
            public static TimeSpan AutoDeleteOnIdle => TimeSpan.FromDays(427);
            public static TimeSpan TemporaryAutoDeleteOnIdle => TimeSpan.FromMinutes(5);
            public static TimeSpan MaxAutoRenewDuration => TimeSpan.FromMinutes(5);
            public static TimeSpan MessageWaitTimeout => TimeSpan.FromSeconds(10);
            public static TimeSpan ShutdownTimeout { get; set; } = TimeSpan.FromMilliseconds(100);
    
            public static int MaxConcurrentCalls => Math.Max(Environment.ProcessorCount, 8);
            public static int PrefetchCount => Math.Max(MaxConcurrentCalls, 32);
        }
    }
    

    至于优化 PrefetchCount/MaxConcurrentCalls 设置,它们通常应该与具有多个实例的竞争消费者匹配以分配负载。

    【讨论】:

    • 谢谢克里斯,这非常有用。另一方面,我再问你一些问题:“BasicMessageTimeToLive”和“DefaultMessageTimeToLive”有什么区别?如何设置订阅的 TTL?我可以为每个队列/主题/订阅设置不同的默认值吗?问候
    • 有什么想法吗?谢谢!
    • BasicMessageTimeToLive 用于 ASB 的基本层,它也用于死信消息超时(奇怪)。我不确定 Subscription TimeToLive 是否可以为订阅端点配置。由于 MassTransit 使用转发订阅,因此 ASB 实际上不尊重 TTL 值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    相关资源
    最近更新 更多