Мое предположение заключается в том, что вы, кажется, заходите в беспорядок команд "забей и забудь".Конечно, это очень специфично для контекста, поскольку существуют сценарии, особенно интеграция, когда у вас нет пользователя, сидящего на другой стороне и задающегося вопросом, была ли его команда в конечном итоге выполнена и каков результат.
Итак, для сценариев интеграции, я согласен с ответом Криса, публикация события исключения домена имеет смысл.
Однако для сценариев взаимодействия с пользователем я бы предпочел использовать запрос-ответ, который может возвращать разныевиды ответа, такие как положительный и отрицательный ответ, как описано в документации .Вот фрагмент из документов:
Сервисная сторона:
public class CheckOrderStatusConsumer :
IConsumer<CheckOrderStatus>
{
public async Task Consume(ConsumeContext<CheckOrderStatus> context)
{
var order = await _orderRepository.Get(context.Message.OrderId);
if (order == null)
await context.RespondAsync<OrderNotFound>(context.Message);
else
await context.RespondAsync<OrderStatusResult>(new
{
OrderId = order.Id,
order.Timestamp,
order.StatusCode,
order.StatusText
});
}
}
Клиентская сторона:
var (statusResponse,notFoundResponse) = await client.GetResponse<OrderStatusResult, OrderNotFound>(new { OrderId = id});
// both tuple values are Task<Response<T>>, need to find out which one completed
if(statusResponse.IsCompletedSuccessfully)
{
var orderStatus = await statusResponse;
// do something
}
else
{
var notFound = await notFoundResponse;
// do something else
}