private static List <BaseMessage> DeserializePulledMessages(BrokerGroup brokerGroup, byte[] content) { var messages = new List <BaseMessage>(); var packet = new Packet(content, 0, content.Length); if (packet.IsReadable()) { var pullLogOffset = packet.ReadInt64(); var consumerLogOffset = packet.ReadInt64(); while (packet.IsReadable()) { var flag = (Flag)packet.ReadByte(); var createdTime = packet.ReadInt64(); var expiredTime = packet.ReadInt64(); var realSubject = RetrySubjectUtils.RealSubject(packet.ReadUTF8()); var messageId = packet.ReadUTF8(); var message = new BaseMessage(realSubject, messageId); if (Flags.IsDelayMessage(flag)) { message.SetDelayTime(DateTimeUtils.FromTime(expiredTime)); } ReadTags(message, flag, packet); var bodyLength = packet.ReadInt32(); var body = new byte[bodyLength]; packet.Read(body, 0, bodyLength); var bodyPacket = new Packet(body, 0, bodyLength); try { while (bodyPacket.IsReadable()) { var key = bodyPacket.ReadUTF8(); var value = bodyPacket.ReadUTF8(); message.SetPropertyForInternal(key, value); } } catch { message.SetProperty(BaseMessage.keys.qmq_corruptData, "true"); } message.SetPropertyForInternal(BaseMessage.keys.qmq_createTime.ToString(), createdTime); message.SetExpiredTime(DateTimeUtils.FromTime(expiredTime)); message.SetProperty(BaseMessage.keys.qmq_brokerGroupName, brokerGroup.Name); message.SetProperty(BaseMessage.keys.qmq_pullOffset, pullLogOffset); message.SetProperty(BaseMessage.keys.qmq_consumerOffset, consumerLogOffset); messages.Add(message); pullLogOffset++; consumerLogOffset++; } } return(messages); }
public Puller(string subject, string consumerGroup, bool isBroadcast, TagType tagType, string[] tags, ConsumeMode consumeMode, PullController controller, PullStrategy pullStrategy, LoadBalance loadBalance) { _subject = subject; _originSubject = RetrySubjectUtils.RealSubject(_subject); _consumerGroup = consumerGroup; _isBroadcast = isBroadcast; _consumeMode = consumeMode; _tagType = (_tags == null || _tags.Length == 0) ? (byte)0 : (byte)tagType; _tags = tags; _controller = controller; _pullStrategy = pullStrategy; _loadBalance = loadBalance; }