如何解决大众运输请求/响应未命中故障消费者
已经有人问过类似类型的问题here
这是我的请求者代码
var bus = Bus.Factory.CreateUsingAzureServiceBus(sbc => { sbc.Host(ServiceBusConnectionString); });
await bus.StartAsync();
IRequestClient<ScanRequest> client=
bus.CreateRequestClient<MyRequest>(new Uri("queue:" + QueueName),TimeSpan.FromSeconds(50));
var response = await client.GetResponse<MyRequestResponse>(scanRequest); //we should get the response here
await Task.Run(() => Console.ReadKey());
await bus.StopAsync();
我注意到,如果消费者发生任何错误,它永远不会击中我的错误消费者。
另一方面,如果我通过 ISendEndPoint 发送消息(如下面的代码所示),则故障消费者工作正常。
IServiceProvider serviceProvider = SetupServiceCollection();
var bus = serviceProvider.GetRequiredService<IBus>();
var endpoint = await bus.GetSendEndpoint(new Uri("queue:" + TopicName));
await endpoint.Send(myRequest);
消息类型和命名空间已正确配置。 我缺少请求/响应模式的任何设置吗?
解决方法
如对您链接的问题的回答所述,故障在出现 ResponseAddress
时不会发布(这是请求/响应所必需的),而是直接发送到响应地址。错误随后由请求客户端接收,并用于在原始请求 Task
上引发异常。
没有任何设置遗漏,这就是它的工作原理。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。