Masstransit request/response 未命中故障消费者
Masstransit request/response does not hit the Fault consumer
已经有人问过类似的问题
这是我的请求者代码
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);
消息类型和命名空间已正确配置。
request/response 模式是否缺少任何设置?
如您所链接问题的答案中所述,故障 不会在出现 ResponseAddress
时发布(这是 request/response 所必需的)而是直接发送到响应地址。该故障随后由请求客户端接收并用于在原始请求上抛出异常 Task
.
没有任何设置缺失,这就是它的工作原理。
已经有人问过类似的问题
这是我的请求者代码
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);
消息类型和命名空间已正确配置。 request/response 模式是否缺少任何设置?
如您所链接问题的答案中所述,故障 不会在出现 ResponseAddress
时发布(这是 request/response 所必需的)而是直接发送到响应地址。该故障随后由请求客户端接收并用于在原始请求上抛出异常 Task
.
没有任何设置缺失,这就是它的工作原理。