Я использовал Automatonymous State Machine с MassTransit. Мне понравилось работать с этой машиной состояний / саг, особенно тем, как она была сконфигурирована и настроена, а также тем, что я могу кормить конечный автомат событиями, реализующими контракты, которые будут использоваться в качестве сообщений.
Вот как это может выглядеть:
//define the statemachine with a State class (ServiceState)
public class ServiceStateMachine :
AutomatonymousStateMachine<ServiceState>{
//define available states
public State Available { get; set; }
public State WaitForItem { get; set; }
//define available events
public Event<RequestItem> RequestItem { get; set; }
//configure the state machine and configure the store to use the ServiceState class
public void ConfigureStateMachineCorrelations(StateMachineSagaRepositoryConfigurator<ServiceState> r)
//bind events to contracts and conditions
r.Correlate(RequestItem,
(state, message) =>
state.CorrelationId == message.CorrelationId)
}
public ServiceStateMachine(IStateMachineActivityFactory activityFactory
{
State(() => Available);
State(() => WaitForItem);
Event(() => RequestItem);
//bind states, events, activities, custom actions...
During(Available,
When(RequestItem)
.Then((state, message) =>
{
state.ServiceId = message.ServiceId; // just an example baby!
})
.TransitionTo(WaitForItem)
.Then(() => _activityFactory.GetActivity<RequestItemActivity, ServiceState>())
}
Какие существуют альтернативные реализации Saga, которые похожи, но не связаны с архитектурами MQ? Я предполагаю, что на самом деле я ищу конечный автомат или реализацию саги, по крайней мере, с постоянным хранилищем в памяти.