2

私は MassTransit を使用しており、アプリに次のようなコードがあります。

RequestMsg request = buildMeARequest();               
SomeTypeOfResponse response = null;

_serviceBus.PublishRequest(request, c =>
    {
        c.Handle<SomeTypeOfResponse>(message => response = message);
        c.SetTimeout(TimeSpan.FromSeconds(30));
    });

return response;

消費者側では、次のようなものがあります。

public class RequestMsgConsumer : Consumes<T>.All
{
    public RequestMsgConsumer(IServiceBus serviceBus)
    {

        _serviceBus = serviceBus;
    }

    public void Consume(RequestMsg request)
    {
        SomeTypeOfResponse response = doWorkToGetResponse(request);

        _serviceBus.Context().Publish(response);
    }
}

これは、すべてがうまくいくとうまく機能します...ただし、元のリクエスターdoWorkToGetResponse(request)が例外 (またはConsume()実際にはメソッドの一部) をスローした場合、失敗の兆候はありません。

Either<Exception, SomeTypeOfResponse>私の最初のアイデアは、リクエスターが常にこの構成を期待するようにクラスを構築することでしたEither<>が、それは私が常にすべての消費メソッドを試行/キャッチすることを余儀なくさせます-そしてそれらはたくさんあります.

他の誰かがこれをよりエレガントに解決しましたか?

4

1 に答える 1