MassTransit + Azure Service Bus: конфигурация TTL по умолчанию для тем и других вопросов

Во-первых, прошу прощения за мой английский, он очень плохой. Я использую MassTransit со служебной шиной Azure для асинхронной связи между микросервисами. У меня есть некоторые сомнения по поводу конфигурации masstransit по умолчанию вместе с сервисной шиной Azure, но я не смог прояснить их в документации. Эти сомнения следующие:

  • Есть ли способ установить TTL по умолчанию для всех очередей и тем? А размер по очередям и темам? В документации указано, что TTL и размер очередей можно настроить при подключении / создании получателя, но, с другой стороны, в отношении тем указано, как настроить TTL, если потребитель подключается к определенной теме, однако в этом случае наши потребители подписываются не на конкретную тему, а просто на messageType, а Masstransit делает все остальное (создает тему, подписчика и пересылает сообщение от подписчика в очередь потребителя).

  • С другой стороны, каковы значения по умолчанию PrefetchCount и MaxConcurrentCalls? И какие оптимальные значения для получения максимальной производительности, учитывая, что потребители имеют горизонтальное масштабирование (конкурирующий потребитель)? Из того, что я прочитал в других вопросах, значения PrefetchCount и MaxConcurrentCalls должны быть близки друг к другу для оптимизации производительности, это правильно?

Большое тебе спасибо.

С Уважением


person Borja Fernández    schedule 15.02.2021    source источник


Ответы (1)


Значения по умолчанию для всех сущностей служебной шины Azure находятся в этот файл, и его можно изменить перед созданием шины.

Значения по умолчанию включают (отредактировано):

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, они обычно должны соответствовать конкурирующему потребителю с несколькими экземплярами для распределения нагрузки.

person Chris Patterson    schedule 15.02.2021
comment
Спасибо, Крис, это очень полезно. С другой стороны, я задаю вам еще несколько вопросов: в чем разница между BasicMessageTimeToLive и DefaultMessageTimeToLive? Как установить TTL подписки? Могу ли я установить разные значения по умолчанию для каждой очереди / темы / подписки? С Уважением - person Borja Fernández; 23.03.2021
comment
любая идея? Спасибо! - person Borja Fernández; 31.03.2021
comment
BasicMessageTimeToLive предназначен для базового уровня ASB, он также используется для тайм-аута недоставленных сообщений (как ни странно). Я не уверен, можно ли настроить TimeToLive подписки для конечной точки подписки. Поскольку MassTransit использует переадресацию подписок, значение TTL фактически не соблюдается ASB. - person Chris Patterson; 31.03.2021