예제 #1
0
        public void Save(ProcessedMessageTrack processedMessage)
        {
            ProcessedMessageTrack lastTrack = collection.Find(GetFilterDefinition(processedMessage)).FirstOrDefault();

            InsertOrUpdate(processedMessage, lastTrack);
            //collection.InsertOneAsync(processedMessage).Wait();
        }
예제 #2
0
 UpdateDefinition <ProcessedMessageTrack> UpdateDefinition(ProcessedMessageTrack processedMessage)
 {
     return(Builders <ProcessedMessageTrack> .Update.
            Set("EventID", processedMessage.EventID).
            Set("EventTime", processedMessage.EventTime).
            Set("MessageType", processedMessage.MessageType).
            Set("ProcessingApplication", processedMessage.ProcessingApplication));
 }
예제 #3
0
 private void InsertOrUpdate(ProcessedMessageTrack processedMessage, ProcessedMessageTrack lastMessage)
 {
     if (lastMessage.IsNull())
     {
         collection.InsertOneAsync(processedMessage).Wait();
     }
     else
     {
         collection.UpdateOne(GetFilterDefinition(processedMessage), UpdateDefinition(processedMessage));
     }
 }
예제 #4
0
        private void FireEvent(IAsyncCursor <BusMessage <t> > cursor, StorageManager storageManager)
        {
            List <BusMessage <t> > messages = cursor.Current.ToList();

            FilterMessagesForTTL(messages);
            BusMessage <t> lastMessage = messages.LastOrDefault();

            if (lastMessage.IsNotNull())
            {
                ProcessedMessageTrack track = DBUtil.ToMessageTrack(lastMessage._id, lastMessage.CreationTime, lastMessage.Message.GetType(), this.listenerApplication);
                storageManager.SaveProcessedMessageTrack(track);
                FireEvent(messages.Select(x => x.Message).ToList());
            }
        }
예제 #5
0
        private FilterDefinition <BusMessage <t> > GetMessagesFilter(StorageManager storageManager)
        {
            messageTrack = storageManager.GetTrackFor(this.listenerApplication);


            FilterDefinition <BusMessage <t> > filter = Builders <BusMessage <t> > .Filter.Where(x => x.SenderApplicationName != listenerApplication.ApplicationName);

            var lastTrackFilter = Builders <BusMessage <t> > .Filter.Where(x => x._id > messageTrack.EventID);

            var sourceFilter = Builders <BusMessage <t> > .Filter.Where(x => subscriber.InterestedInSources.Contains(x.SenderApplicationName));

            if (messageTrack.IsNotNull())
            {
                filter = Builders <BusMessage <t> > .Filter.And(new FilterDefinition <BusMessage <t> >[] { filter, lastTrackFilter });
            }

            if (subscriber.InterestedInSources.IsNotNull() && subscriber.InterestedInSources.Count > 0)
            {
                filter = Builders <BusMessage <t> > .Filter.And(new FilterDefinition <BusMessage <t> >[] { filter, sourceFilter });
            }
            return(filter);
        }
예제 #6
0
 public void SaveProcessedMessageTrack(ProcessedMessageTrack processedMessage)
 {
     new ProcessedMessagesCollection(this.MongoDB).Save(processedMessage);
 }
예제 #7
0
 FilterDefinition <ProcessedMessageTrack> GetFilterDefinition(ProcessedMessageTrack processedMessage)
 {
     return(Builders <ProcessedMessageTrack> .Filter.Where(x => x.MessageType == processedMessage.MessageType && x.ProcessingApplication == processedMessage.ProcessingApplication));
 }