У меня настроен бланк маршрутизации MassTransit и работает.Для справки: квитанция о маршруте принимает идентификатор элемента в базе данных MongoDB, а затем создает «версию» этого документа в базе данных SQL с помощью EF Core.Действия (в виде команд):
- Перенос документа в SQL
- Обновление информации аудита в документе MongoDB
- Обновление статуса документа MongoDB (т. Е. Опубликовано)
Все вышеперечисленное является командами записи.
Я добавил новый 1-й шаг, который запускает запрос, чтобы убедиться, что документ MongoDB действителен (например, заполнены поля имени и описания) перед запуском миграции.Если этот шаг завершается неудачей, он генерирует пользовательское исключение, которое, в свою очередь, вызывает сбойное событие, которое затем регистрируется и управляется моей сагой.Ниже приведен фрагмент кода моей активности, за которым следует код строителя маршрутной квитанции:
Код активности
var result = await _queryDispatcher.ExecuteAsync<SelectModuleValidationResultById, ModuleValidationResult>(query).ConfigureAwait(false);
if (!result.ModuleValidationMessages.Any())
{
return context.Completed();
}
return context.Faulted(new ModuleNotValidException
{
ModuleId = messageCommand.ModuleId,
ModuleValidationMessages = result.ModuleValidationMessages
});
Код строителя маршрутной квитанции
builder.AddActivity(
nameof(Step1ValidateModule),
context.GetDestinationAddress(ActivityHelper.BuildQueueName<Step1ValidateModule>(ActivityQueueType.Execute)),
new SelectModuleValidationResultById(
context.Message.ModuleId,
context.Message.UserId,
context.Message.LanguageId)
);
builder.AddSubscription(
context.SourceAddress,
RoutingSlipEvents.ActivityFaulted,
RoutingSlipEventContents.All,
nameof(Step1ValidateModule),
x => x.Send<IModuleValidationFailed>(new
{
context.Message.ModuleId,
context.Message.LanguageId,
context.Message.UserId,
context.Message.DeploymentId,
}));
Пока все этоработает, и событие попадает в мою сагу. В идеале я хотел бы добавить ModuleValidationMessages (т.е. любые сообщения о неудачной проверке) к возвращаемому событию, но я не могу понять, как или даже если это возможно (или более фундаментально, если это правильно)что нужно сделать).
Стоит отметить, что это последняя проверка, и что проверка проверяется клиентом, прежде чем даже пытаться выполнить миграцию, поэтому в худшем случае, который я могу оставить, есть «Имеет проблемы с проверкой»но в идеале я хотел бы включить сход с рельсов в неудачный ответ.