public void Run() { DateTime currentTime = DateTime.Now; foreach (KeyValuePair <object, MessageBarrier <T, K> > entry in _outer._barriers) { if (currentTime - entry.Value.Timestamp >= _outer._timeout) { MessageBarrier <T, K> barrier = entry.Value; lock (barrier) { _outer.RemoveBarrier(entry.Key); if (_outer._sendPartialResultOnTimeout) { barrier.SetComplete(); _outer.ProcessBarrier(barrier); } else { foreach (IMessage message in barrier.Messages.Values) { if (_outer.logger.IsDebugEnabled) { _outer.logger.Debug("Handling of Message group with correlationId '" + entry.Key + "' has timed out."); } _outer.DiscardMessage(message); } } } } } }
protected override void ProcessBarrier(MessageBarrier <IDictionary <object, IMessage>, object> barrier) { IList <IMessage> messageList = new List <IMessage>(barrier.Messages.Values); if (!barrier.IsComplete && messageList.Count > 0) { if (_completionStrategy.IsComplete(messageList)) { barrier.SetComplete(); } } if (barrier.IsComplete) { RemoveBarrier(barrier.CorrelationId); IMessage result = AggregateMessages(messageList); if (result != null) { if (result.Headers.CorrelationId == null) { result = MessageBuilder.FromMessage(result).SetCorrelationId(barrier.CorrelationId).Build(); } SendReply(result, ResolveReplyChannelFromMessage(messageList[0])); } } }
protected override void ProcessBarrier(MessageBarrier <SortedDictionary <int, IMessage>, int> barrier) { if (HasReceivedAllMessages(barrier.Messages)) { barrier.SetComplete(); } IList <IMessage> releasedMessages = ReleaseAvailableMessages(barrier); if (releasedMessages != null && releasedMessages.Count > 0) { IMessage lastMessage = releasedMessages[releasedMessages.Count - 1]; if (lastMessage.Headers.SequenceNumber.Equals(lastMessage.Headers.SequenceSize - 1)) { RemoveBarrier(barrier.CorrelationId); } SendReplies(releasedMessages, ResolveReplyChannelFromMessage(releasedMessages[0])); } }