コード例 #1
0
 protected void ProcessPayload(MessageAndOffset messageAndOffset)
 {
     using (var stm = new MemoryStream(messageAndOffset.Message.Payload, false))
     {
         stm.Position = 0;
         var msg = Formatter.Deserialize(stm);
         ChainHandler.ProcessMessage((IMessage)msg);
     }
 }
コード例 #2
0
        private TData MakeNext()
        {
            if (current == null || !current.MoveNext())
            {
                Logger.Debug("Getting new FetchedDataChunk...");
                if (consumerTimeoutMs < 0)
                {
                    currentDataChunk = this.channel.Take(cancellationToken);
                }
                else
                {
                    bool done = channel.TryTake(out currentDataChunk, consumerTimeoutMs, cancellationToken);
                    if (!done)
                    {
                        Logger.Debug("Consumer iterator timing out...");
                        state = ConsumerIteratorState.NotReady;
                        throw new ConsumerTimeoutException();
                    }
                }

                if (currentDataChunk.Equals(ZookeeperConsumerConnector.ShutdownCommand))
                {
                    Logger.Debug("Received the shutdown command");
                    channel.Add(currentDataChunk);
                    return(this.AllDone());
                }

                currentTopicInfo = currentDataChunk.TopicInfo;
                Logger.DebugFormat("CurrentTopicInfo: ConsumedOffset({0}), FetchOffset({1})",
                                   currentTopicInfo.ConsumeOffset, currentTopicInfo.FetchOffset);
                if (currentTopicInfo.FetchOffset < currentDataChunk.FetchOffset)
                {
                    Logger.ErrorFormat("consumed offset: {0} doesn't match fetch offset: {1} for {2}; consumer may lose data",
                                       currentTopicInfo.ConsumeOffset,
                                       currentDataChunk.FetchOffset,
                                       currentTopicInfo);
                    currentTopicInfo.ConsumeOffset = currentDataChunk.FetchOffset;
                }

                current = currentDataChunk.Messages.GetEnumerator();
                current.MoveNext();
            }

            MessageAndOffset item = current.Current;

            consumedOffset = item.MessageOffset;

            return(this.decoder.ToEvent(item.Message));
        }
コード例 #3
0
 protected bool Equals(MessageAndOffset other)
 {
     return Equals(this.Message, other.Message) && this.Offset == other.Offset;
 }
コード例 #4
0
 protected bool Equals(MessageAndOffset other)
 {
     return(Equals(this.Message, other.Message) && this.Offset == other.Offset);
 }