public void Save(ProcessedMessageTrack processedMessage) { ProcessedMessageTrack lastTrack = collection.Find(GetFilterDefinition(processedMessage)).FirstOrDefault(); InsertOrUpdate(processedMessage, lastTrack); //collection.InsertOneAsync(processedMessage).Wait(); }
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)); }
private void InsertOrUpdate(ProcessedMessageTrack processedMessage, ProcessedMessageTrack lastMessage) { if (lastMessage.IsNull()) { collection.InsertOneAsync(processedMessage).Wait(); } else { collection.UpdateOne(GetFilterDefinition(processedMessage), UpdateDefinition(processedMessage)); } }
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()); } }
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); }
public void SaveProcessedMessageTrack(ProcessedMessageTrack processedMessage) { new ProcessedMessagesCollection(this.MongoDB).Save(processedMessage); }
FilterDefinition <ProcessedMessageTrack> GetFilterDefinition(ProcessedMessageTrack processedMessage) { return(Builders <ProcessedMessageTrack> .Filter.Where(x => x.MessageType == processedMessage.MessageType && x.ProcessingApplication == processedMessage.ProcessingApplication)); }