如何解决为 MassTransit SQS 调用 ReceiveEndpoint 时如何防止 NullReferenceException?
我在 .NET 核心 Web 应用程序 (Web api) 中使用 MassTransit 来使用 SQS。它可以很好地发布消息。但是在我尝试添加消费者后,我遇到了一个问题。
这是我的代码
public static void UseMassTransit(this IServiceCollection services,MassTransitConfiguration massTransitConfiguration)
{
services.AddMassTransit(x =>
{
x.AddConsumer<CustomerChangeConsumer>();
x.UsingAmazonSqs((context,cfg) =>
{
cfg.Host(massTransitConfiguration.Host,h =>
{
h.AccessKey(massTransitConfiguration.AccessKey);
h.SecretKey(massTransitConfiguration.SecretKey);
cfg.ReceiveEndpoint("CustomerChangeConsumer",configurator =>
{
configurator.ConfigureConsumer<CustomerChangeConsumer>(context);
});
// scope topics as well
h.EnableScopedTopics();
});
});
});
services.AddMassTransitHostedService();
}
问题在于 ReceiveEndpoint
给出了 NullReferenceException
。
这很奇怪,因为 ConfigureConsumer
被执行了。但是,ReceiveEndpoint
不能完全完成而不抛出这个异常。
这是堆栈跟踪:
MassTransit.AmazonSqsTransport.Configurators.ConfigurationHostSettings.FormatHostAddress()
System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication,Boolean useDefaultConstructor)
System.Lazy`1.CreateValue()
System.Lazy`1.Value
MassTransit.AmazonSqsTransport.Configurators.ConfigurationHostSettings.HostAddress
MassTransit.AmazonSqsTransport.Configuration.AmazonSqsHostConfiguration.HostAddress
MassTransit.AmazonSqsTransport.Configuration.AmazonSqsReceiveEndpointConfiguration.FormatInputAddress()
System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication,Boolean useDefaultConstructor)
System.Lazy`1.CreateValue()
System.Lazy`1.Value
MassTransit.AmazonSqsTransport.Configuration.AmazonSqsReceiveEndpointConfiguration.InputAddress
MassTransit.Monitoring.Health.EndpointHealth.EndpointConfigured(T configurator)
MassTransit.Monitoring.Health.BusHealth.MassTransit.EndpointConfigurators.IEndpointConfigurationObserver.EndpointConfigured[T](T configurator)
MassTransit.EndpointConfigurators.EndpointConfigurationObservable.<>c__DisplayClass0_0`1.<EndpointConfigured>b__0(IEndpointConfigurationObserver observer)
GreenPipes.Util.Connectable`1.All(Func`2 callback)
MassTransit.EndpointConfigurators.EndpointConfigurationObservable.EndpointConfigured(T configurator)
MassTransit.AmazonSqsTransport.Configuration.AmazonSqsHostConfiguration.CreateReceiveEndpointConfiguration(QueueReceiveSettings settings,IAmazonSqsEndpointConfiguration endpointConfiguration,Action`1 configure)
MassTransit.AmazonSqsTransport.Configuration.AmazonSqsHostConfiguration.CreateReceiveEndpointConfiguration(String queueName,Action`1 configure)
MassTransit.AmazonSqsTransport.Configuration.AmazonSqsHostConfiguration.ReceiveEndpoint(String queueName,Action`1 configureEndpoint)
MassTransit.AmazonSqsTransport.Configurators.AmazonSqsBusFactoryConfigurator.ReceiveEndpoint(String queueName,Action`1 configureEndpoint)
Kinley.SMPD.CustomerService.API.Extensions.MassTransitExtensions.<>c__DisplayClass0_1.<UseMassTransit>b__2(IAmazonSqsHostConfigurator h) in MassTransitExtensions.cs: line: 23
怎么会?以及如何解决?
解决方法
您不应在主机配置闭包内配置接收端点。尝试将其移到 .Host()
方法之外,看看是否能解决您的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。