私は 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<>
が、それは私が常にすべての消費メソッドを試行/キャッチすることを余儀なくさせます-そしてそれらはたくさんあります.
他の誰かがこれをよりエレガントに解決しましたか?