Чтобы проверить это и убедиться, что объяснение проще, я попытался использовать библиотеку примеров общественного транспорта ( https://github.com/MassTransit/Sample-Library), и я вижу то же самое.
Я изменил NotifyMemberActivity, и теперь он выглядит так:
Код: Выделить всё
public class NotifyMemberActivity :
IStateMachineActivity
{
readonly IMemberRegistry _memberRegistry;
public NotifyMemberActivity(IMemberRegistry memberRegistry)
{
_memberRegistry = memberRegistry;
}
public void Probe(ProbeContext context)
{
context.CreateScope("notifyMember");
}
public void Accept(StateMachineVisitor visitor)
{
visitor.Visit(this);
}
public async Task Execute(BehaviorContext context, IBehavior next)
{
await Execute(context);
throw new NotImplementedException();
await next.Execute(context);
}
public async Task Execute(BehaviorContext context, IBehavior next)
where T : class
{
await Execute(context);
throw new NotImplementedException();
await next.Execute(context);
}
public Task Faulted(BehaviorExceptionContext context, IBehavior next)
where TException : Exception
{
return next.Faulted(context);
}
public Task Faulted(BehaviorExceptionContext context, IBehavior next)
where TException : Exception
where T : class
{
return next.Faulted(context);
}
async Task Execute(BehaviorContext context)
{
var isValid = await _memberRegistry.IsMemberValid(context.Saga.MemberId);
if (!isValid)
throw new InvalidOperationException("Invalid memberId");
throw new NotImplementedException();
var consumeContext = context.GetPayload();
await consumeContext.Publish(new
{
context.Saga.MemberId,
context.Saga.DueDate
});
}
}
Я ожидал, что если в активности участника уведомления произойдет исключение, то Faulted метод будет запущен. Внутри этого ошибочного события я хотел выполнить любые действия, которые должны произойти, чтобы компенсировать произошедший сбой, но, похоже, это вообще не работает.
Есть что-то, что я' Я неправильно настраиваю или мне не хватает понимания того, как следует обрабатывать сбои конечного автомата?
Подробнее здесь: https://stackoverflow.com/questions/791 ... -triggered