NServiceBus 6.2 теряет сообщения с RabbitMQ

Я использую NSB версии 6.2 и RabbitMQ версии 4. Я использую RabbitMQTransport. Мой сервер RabbitMQ находится на виртуальной машине в Azure. когда я отправляю сообщения, иногда я теряю сообщения без каких-либо ошибок.

это моя конфигурация шины NService.

            EndpointConfiguration config = null;
        string endpointName = ConfigurationManager.AppSettings.Get("NServiceBus.EndpointName");
        config = configEndPoint.IsNullOrDefault() ? new EndpointConfiguration(endpointName) : configEndPoint;
        int maximumConcurrencyLevel = ConfigurationManager.AppSettings.Get("NServiceBus.TransportConfig.MaximumConcurrencyLevel").ToInt();
        config.LimitMessageProcessingConcurrencyTo(maximumConcurrencyLevel);
        int numberOfRetries = ConfigurationManager.AppSettings.Get("NServiceBus.TransportConfig.NumberOfRetries").ToInt();
        var recoverability = config.Recoverability();
        recoverability.Immediate(
            customizations: immediate =>
            {
                immediate.NumberOfRetries(numberOfRetries);
            });

        DefaultFactory defaultFactory = LogManager.Use<DefaultFactory>();
        defaultFactory.Directory(this.DatabusDirectory);
        defaultFactory.Level(LogLevel.Error);

        config.IdealinkJsonSerializer();
        config.UsePersistence<InMemoryPersistence>();

        config.SendFailedMessagesTo("error");
        config.AuditProcessedMessagesTo("audit");

        // configure transport
        config.UseTransport<RabbitMQTransport>().Transactions(TransportTransactionMode.ReceiveOnly);
         var endpointInstance = Endpoint.Start(endpointConfiguration).GetAwaiter().GetResult();

1 ответ

Конфигурация вашей конечной точки выглядит хорошо, за исключением постоянства. Постоянство используется для функций, которые изначально не поддерживаются базовым транспортом. Для RabbitMQ нет встроенного механизма для отправки отложенных сообщений. До версии 4.3 постоянство использовалось для хранения тайм-аутов. Если вы используете InMemoryPersistence никакая информация не будет сохранена после перезапуска конечной точки. Тайм-ауты необходимы для функции восстановления, в частности, отложенных повторных попыток. Начиная с версии 4.3 и выше, постоянство не требуется для тайм-аутов, но InMemoryPersistence все еще не должен использоваться. Вы можете выбрать другие постоянства, основанные на технологии и сценарии под рукой.

Обратите внимание, что версия 4.0.0 не поддерживается. Вы должны обновить до 4.3.x или 4.4.x и проверить поведение, чтобы увидеть, замечаете ли вы потерю сообщения или нет. Если вы все еще теряете сообщения, я предлагаю предоставить более подробную информацию, такую ​​как файл журнала и код обработчика. Если вы не можете поделиться этим публично, отправьте запрос в службу поддержки.

Надеюсь, это поможет.

Другие вопросы по тегам