namespace FunWithMassTransit
{
using System;
using System.Linq.Expressions;
using Magnum.StateMachine;
using MassTransit;
using MassTransit.Saga;
using Messages;
using log4net;
class MySaga: SagaStateMachine<MySaga>, ISaga
{
private static readonly ILog _logger = LogManager.GetLogger(typeof(MySaga));
private readonly DateTime _startTime = DateTime.Now;
private static readonly TimeSpan _maxTime = TimeSpan.FromSeconds(5);
static MySaga()
{
Define(() =>
{
Initially(When(Message).Then((saga, message)=> saga.AddMessage(message)).TransitionTo(Collecting));
During(Collecting, When(Message).Then((saga, message) =>
saga.AddMessage(message)));
Correlate(Message).By((saga, message) => (DateTime.Now - saga.StartTime < _maxTime));
});
}
private void AddMessage(MyMessage message)
{
_logger.Info("Message added to saga " + CorrelationId);
}
public static State Initial { get; set; }
public static State Completed { get; set; }
public static State Collecting { get; set; }
public static Event<MyMessage> Message { get; set; }
public MySaga(Guid guid)
{
_logger.Info("Started Saga with GUID " + guid);
CorrelationId = guid;
}
public DateTime StartTime
{
get { return _startTime; }
}
public Guid CorrelationId { get; set; }
public IServiceBus Bus { get; set; }
}
}