Политика повторных попыток MassTransit создает исключение System.NullReferenceException: - PullRequest
1 голос
/ 30 января 2020

По какой-то причине я не могу использовать повторную попытку для моего потребителя. Я следую примеру из документации, я просто добавляю простой r.Interval <> для моего потребителя, но при сборке это не удается ... не знаю, почему

 services.AddMassTransit(x =>
        {
            x.AddConsumer<SyncConsumer>();
            x.AddConsumer<SyncForcadoConsumer>();
        });
        services.AddSingleton(provider => Bus.Factory.CreateUsingAzureServiceBus(cfg =>
        {
            var host = cfg.Host(
                "Endpoint=sb://" + busName + ".servicebus.windows.net/;" +
                "SharedAccessKeyName=" + keyName + ";" +
                "SharedAccessKey=" + secret,
                z =>
                {
                    TokenProvider
                        .CreateSharedAccessSignatureTokenProvider(keyName, secret);
                });
            cfg.UseExtensionsLogging(provider.GetService<ILoggerFactory>());
            cfg.ReceiveEndpoint(host, "sync-crm-relacionamento",
                e => { e.Consumer<SyncConsumer>(provider); });
            cfg.ReceiveEndpoint(host, "sync-forcado-crm-relacionamento",
                e =>
                {                        
                    e.Consumer<SyncForcadoConsumer>(provider);

                    e.UseMessageRetry(r =>
                    {
                        r.Handle<ArgumentNullException>();

                    });
                });
        }));

но по какой-то причине я получаю эту ошибку

Unhandled Exception: MassTransit.ConfigurationException: An exception occurred during bus creation ---> System.NullReferenceException: Object reference not set to an instance of an object.
   at MassTransit.PipeConfigurators.ConsumeContextRetryPipeSpecification`2.Apply(IPipeBuilder`1 builder)
   at MassTransit.ConsumePipeSpecifications.MessageConsumePipeSpecification`1.Apply(ISpecificationPipeBuilder`1 builder)
   at MassTransit.ConsumePipeSpecifications.MessageConsumePipeSpecification`1.BuildMessagePipe(IPipe`1 pipe)
   at MassTransit.Builders.ReceiveEndpointBuilder.ConnectConsumePipe[T](IPipe`1 pipe)
   at MassTransit.ConsumeConnectors.ConsumerConnector`1.MassTransit.ConsumeConnectors.IConsumerConnector.ConnectConsumer[TConsumer](IConsumePipeConnector consumePipe, IConsumerFactory`1 consumerFactory, IConsumerSpecification`1 specification)
   at MassTransit.ConsumeConfigurators.ConsumerConfigurator`1.Configure(IReceiveEndpointBuilder builder)

Есть идеи?

1 Ответ

2 голосов
/ 30 января 2020

Вам необходимо указать политику повторных попыток. Допустимые политики включают в себя:

e.UseMessageRetry(r =>
{
    r.Interval(5, 100);

    r.Intervals(100, 500, 1000);

    r.Immediate(2);
});

Выберите один, есть также несколько других, включая Экспоненциальный и Нет.

Выдается исключение конфигурации, поскольку вы фактически не настраивали повтор .

Использование повторов описано в документации .

.
...