如何解决MassTransit 订阅错误:未找到带有密钥的接收端点
我正在将 MassTransit 依赖项从 5.1.2 版迁移到 5.2.0,在此之后,一些测试停止工作并引发了以下异常:
未找到带有密钥的接收端点:API.Faturamento.Eventos.Testes.Integrados.Support/MessageA/Subscriptions/test_subscription_message_a
我使用的是 .Net Framework 4.6.2,测试与 MassTransit 5.1.2 完美配合,但当我将其更改为 5.2.0 版本时它停止工作。 我已经搜索了很多解决方案,但我之前没有见过任何人遇到过这个问题。
TestInitialize 方法
public void Initialize()
{
queueName = ConsumerTest.ConsumerTestQueueName;
_busControl = Bus.Factory.CreateUsingAzureServiceBus(true,true);
}
CreateUsingAzureServiceBus 方法
public static MassTransitServiceBus CreateUsingAzureServiceBus(this IBusFactorySelector busFactory,bool logPreEvent = false,bool logPostEvent = false)
{
string serviceBusUrl = "sb://your-service-bus-url.servicebus.windows.net/";
string serviceBusAccessKey = "your-service-bus-access-key";
IServiceBusHost host = null;
IBusControl busControl = null;
busControl = Bus.Factory.CreateUsingAzureServiceBus(cfg =>
{
cfg.Host(new Uri(serviceBusUrl),host =>
{
host.OperationTimeout = TimeSpan.FromSeconds(60);
host.TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(tokenKeyName,serviceBusAccessKey);
});
cfg.LockDuration = TimeSpan.FromSeconds(60);
cfg.MaxConcurrentCalls = 80;
cfg.PrefetchCount = 100;
cfg.UseRenewLock(TimeSpan.FromSeconds(280));
});
busControl.ConnectConsumeObserver(new MassTransitConsumeObserver(logPreEvent,logPostEvent));
busControl.ConnectReceiveEndpointObserver(new MassTransitReceiveEndpointObserver(logPreEvent,logPostEvent));
return new MassTransitServiceBus(host,busControl);
}
测试方法
public void PublishMessage_ShouldReceiveAndHandle()
{
_busControl.Subscribe<FirstSubscribeConsumer,MessageA>("test_subscription_message_a");
_busControl.Subscribe<SecondSubscribeConsumer,MessageA>("second_test_subscription_message_a");
_busControl.Publish<MessageA>(new { Value = $"MessageA: {Guid.NewGuid().ToString("N")}" });
Thread.Sleep(10000);
}
在调用第一个订阅之后抛出异常的 MassTransit 扩展方法
public static void Subscribe<TConsumer,TMessage>(this IServiceBusHost host,string subscriptionName)
where TMessage: class
where TConsumer : ContractConsumerBase<TMessage>,new()
{
host.ConnectSubscriptionEndpoint<TMessage>(
subscriptionName,e => { e.Consumer<TConsumer>(); }
);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。