示例#1
0
        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());
            }
        }
示例#2
0
        public static void MarkProcessed(int sequenceNumber, ISession session)
        {
            var record = new CommandProcessingResultRecord(sequenceNumber, DateTime.UtcNow);

            session.Save(record);
        }