Example #1
0
        protected override void EncodeBody(IKafkaWriter writer, IRequestContext context)
        {
            var totalCompressedBytes = 0;
            var groupedPayloads      = (from p in topics
                                        group p by new {
                p.topic, p.partition_id, p.Codec
            } into tpc
                                        select tpc).ToList();

            writer.Write(acks)
            .Write((int)timeout.TotalMilliseconds)
            .Write(groupedPayloads.Count);

            foreach (var groupedPayload in groupedPayloads)
            {
                var payloads = groupedPayload.ToList();
                writer.Write(groupedPayload.Key.topic)
                .Write(payloads.Count)
                .Write(groupedPayload.Key.partition_id);

                var compressedBytes = writer.Write(payloads.SelectMany(x => x.Messages), groupedPayload.Key.Codec);
                Interlocked.Add(ref totalCompressedBytes, compressedBytes);
            }

            if (context.OnProduceRequestMessages != null)
            {
                var segment = writer.ToSegment();
                context.OnProduceRequestMessages(topics.Sum(_ => _.Messages.Count), segment.Count, totalCompressedBytes);
            }
        }