.net - MassTransit 重试策略引发 System.NullReferenceException:
问题描述
出于某种原因,我无法按照文档中的示例对我的消费者使用重试,我只是向我的消费者添加了一个简单的 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)
有任何想法吗?
解决方案
您需要实际指定重试策略。有效政策包括:
e.UseMessageRetry(r =>
{
r.Interval(5, 100);
r.Intervals(100, 500, 1000);
r.Immediate(2);
});
选择一个,还有其他几个,包括指数和无。
它引发了配置异常,因为您实际上没有配置重试。
重试用法包含在文档中。
推荐阅读
- azure - Azure 机器学习建议
- node.js - TypeError [ERR_INVALID_OPT_VALUE_ENCODING] 值“./ab.txt”对于选项“encoding”无效
- angular - 如何在 ngOninit 中使用事件发射器调用共享服务?
- ruby-on-rails - Ruby on Rails 主页
- angular - Angular 文档站点根据访问者的不同操作系统切换版本?
- react-native - 更新由 RCTView 管理的视图的属性“转换”时出错
- java - 从哪里获取 JDK 7u131 补丁
- powershell - 如果来自另一个文件的引用正确,则将数据相加
- java - 在java中使用simpledateformat添加n天
- c# - 如何在应用程序配置文件中定义和加密连接字符串