Клиент обратного вызова NServiceBus 6 никогда не получает обратный вызов при сбое обработчика запроса

Используя функцию обратного вызова NServiceBus 6, я не нашел способа предупредить клиента о сбое обработчика запроса. Обработчик запросов пройдет все этапы восстановления и в конечном итоге поместит сообщение в очередь ошибок. Между тем, клиент просто сидит и ждет ответа.

// Client code (e.g. in an MVC Controller)
var message = new FooRequest();
var response = await endpoint.Request<FooReponse>(message);

// Handler code
public class FooRequestHandler : IHandleMessages<FooRequest>
{
    Task Handle(FooRequest message, IMessageHandlerContext context)
    {
        throw new Exception("Fails before the reply");
        return context.Reply(new FooResponse());
    }
}

В описанной выше ситуации, как я могу сообщить контроллеру MVC / вызывающему коду, что обработчик окончательно вышел из строя?

1 ответ

Решение

Это по замыслу. С точки зрения клиента, я бы порекомендовал вам всегда проходить в CancellationToken это определяет, как долго запрашивающей стороне разрешается ждать ответа на запрос.

var cancellationTokenSource = new CancellationTokenSource();
cancellationTokenSource.CancelAfter(TimeSpan.FromSeconds(5)); // your SLA timeout
var message = new Message();
try
{
    var response = await endpoint.Request<FooRequest>(message, cancellationTokenSource.Token)
                                 .ConfigureAwait(false);
}
catch (OperationCanceledException)
{
    // Exception that is raised when the CancellationTokenSource is canceled
}

Клиентский домен определяет, как долго клиентскому запросу разрешено асинхронно ожидать ответа. Для получения дополнительной информации об отмене см. https://docs.particular.net/nservicebus/messaging/callbacks?version=callbacks_3

Другие вопросы по тегам