コード例 #1
0
ファイル: Protocol.cs プロジェクト: orianbsilva/kafka4net
        internal async Task<ProducerResponse> Produce(ProduceRequest request)
        {
            var conn = request.Broker.Conn;
            var client = await conn.GetClientAsync();
            _log.Debug("Sending ProduceRequest to {0}, Request: {1}", conn, request);
            if(_etw.IsEnabled())
                _etw.ProtocolProduceRequest(request.ToString(), request.Broker.NodeId);

            var response = await conn.Correlation.SendAndCorrelateAsync(
                id => Serializer.Serialize(request, id),
                Serializer.GetProducerResponse,
                client,
                CancellationToken.None
            );
            _log.Debug("Got ProduceResponse: {0}", response);
            if (_etw.IsEnabled())
                _etw.ProtocolProduceResponse(response.ToString(), request.Broker.NodeId);

            return response;
        }
コード例 #2
0
ファイル: Cluster.cs プロジェクト: KateHuiLiu/kafka4net
        internal async Task<ProducerResponse> SendBatchAsync(int leader, IEnumerable<Message> batch, Producer producer)
        {
            CheckConnected();
            // TODO: do state checking. Introduce this.Connected task to wait if needed

            var request = new ProduceRequest
            {
                Broker = _metadata.Brokers.First(b => b.NodeId == leader),
                RequiredAcks = producer.Configuration.RequiredAcks,
                Timeout = producer.Configuration.ProduceRequestTimeoutMs,
                TopicData = new[] 
                {
                    new TopicData {
                        TopicName = producer.Topic,
                        PartitionsData = (
                            from msg in batch
                            // group messages belonging to the same partition
                            group msg by msg.PartitionId
                            into partitionGrp
                            select new PartitionData {
                                Pub = producer,
                                OriginalMessages = partitionGrp.ToArray(),
                                Partition = partitionGrp.Key,
                                Messages = (
                                    from msg in partitionGrp
                                    select new MessageData {
                                        Key = msg.Key,
                                        Value = msg.Value
                                    }
                                    )
                            }
                            )
                    }
                }
            };

            var response = await _protocol.Produce(request).ConfigureAwait(false);
            _log.Debug("#{0} SendBatchAsync complete", _id);
            return response;
        }