Comments 8
UFO just landed and posted this here
А коррелировать не по Id, а по, скажем, диапазону времени саги умеют? Допустим, если бывает необходимость скоррелировать событие с сагой, которое произошло в определенном пятиминутном диапазоне?
0
Скорее всего, да, только надо использовать для корелляции ивента не CorrelateById, а CorrelateBy.
/// <summary>Speicyf the correlation expression for the event</summary>
/// <param name="correlationExpression"></param>
/// <returns></returns>
EventCorrelationConfigurator<TInstance, TData> CorrelateBy(Expression<Func<TInstance, ConsumeContext<TData>, bool>> correlationExpression);
0
А данные саги хранятся в базе данных или в оперативке?
0
В базе, мы используем Entity Framework, но можно и другие http://masstransit-project.com/MassTransit/advanced/sagas/persistence.html
0
Когда-то тоже была такая задача, выбрал Akka.net и её персистентных акторов.
В основном потому что язык создания стейт машин для масс транзита показался уж слишком неудобным
0
Так как все манипуляции с данными мы делаем в той же транзакции, что и Saga, транзакция не будет закрыта.
Стоит уточнить, что не стоит сохранять что-то в БД из обработчика сообщения в стейт-машине, иначе, может получиться так, что эти данные уже в БД, а само состояние саги не сохранилось.
лучше добавить в контракт имя очереди для ответа, чем использовать схему Request/Response от MassTransit, которую и сам MassTransit предлагает избегать. Так как это сильно уменьшает надежность. Вы теряете все преимущества асинхронности
… но это не относится к Request`ам, отправленным из саги. Ожидание ответа реализовано просто еще одним состояним стейт-машины.
0
Sign up to leave a comment.
MassTransit, Saga и RabbitMQ для реализации диспетчера процессов