public IEnumerable <CommandEnvelope> Dequeue(int maxCount) { using (var session = _sessionFactory.OpenSession()) { CommandRecord aliasCommandRecord = null; CommandProcessingResultRecord aliasCommandProcessing = null; var processedCommands = QueryOver.Of(() => aliasCommandProcessing) .Where(() => aliasCommandProcessing.Sequence == aliasCommandRecord.Sequence) .Select(x => x.Sequence) .DetachedCriteria; return(session.QueryOver(() => aliasCommandRecord) .Where(Subqueries.NotExists(processedCommands)) .Take(maxCount) .List <CommandRecord>() .Select(x => new CommandEnvelope(x.Sequence, (Command)x.DeserializePayload())) .ToList()); } }
public static void MarkProcessed(int sequenceNumber, ISession session) { var record = new CommandProcessingResultRecord(sequenceNumber, DateTime.UtcNow); session.Save(record); }