public ProducerConfig(Int32 throttleSize, Int32 throttleMilliseconds, MessageCodec messageCodec, AcknowlegeStrategy acknowlegeStrategy)
 {
     ThrottleSize         = throttleSize;
     ThrottleMilliseconds = throttleMilliseconds;
     MessageCodec         = messageCodec;
     AcknowlegeStrategy   = acknowlegeStrategy;
 }
Exemple #2
0
        public async Task <Int64> ProduceAsync(String topic, Int32 partition, IList <Message> messages,
                                               AcknowlegeStrategy strategy = AcknowlegeStrategy.Written, MessageCodec codec = MessageCodec.None)
        {
            EnsureLegalTopicSpelling(topic);
            var broker   = _topicBrokerDispatcher.SelectBroker(topic, partition);
            var request  = new ProduceRequest(topic, partition, messages);
            var response = (ProduceResponse)(await SubmitRequestAsync(broker.ToUri(), request));

            response.TryThrowFirstErrorOccured();
            return(response.TopicPartitions[0].Details[0].Offset);
        }
Exemple #3
0
        /*public ProduceRequest(  IDictionary<String, List<Message>> messages,
         *                      Int32 partition,
         *                      AcknowlegeStrategy strategy = AcknowlegeStrategy.Written)
         *  : base(ApiKey.ProduceRequest) {
         *  if (messages == null || messages.Count == 0) {
         *      return;
         *  }
         *
         *  RequiredAcks        = strategy; //important
         *  Timeout             = 10;
         *  var topicPartitions = new List<ProduceRequestTopicPartition>();
         *  foreach (var list in messages) {
         *      if(list.Value.Count == 0) {
         *          continue;
         *      }
         *
         *      var topicPartition = new ProduceRequestTopicPartition {
         *          TopicName = list.Key,
         *          Details   = new[] {
         *              new ProduceRequestTopicDetail  {
         *                  Partition  = partition,
         *                  MessageSet = list.Value.Count > 1
         *                      ? new GZipMessageSet() : new MessageSet()
         *              },
         *          }
         *      };
         *
         *      var messageEntities = new List<MessageSetDetail>();
         *      foreach (var item in list.Value) {
         *          var messageSet = new MessageSetDetail();
         *          messageEntities.Add(messageSet);
         *          messageSet.Message = new MessageSetItem();
         *          if (item.Key != null) {
         *              messageSet.Message.Key = Encoding.UTF8.GetBytes(item.Key);
         *          }
         *          messageSet.Message.Value = Encoding.UTF8.GetBytes(item.Value);
         *
         *      }
         *      topicPartition.Details[0].MessageSet.Items = messageEntities.ToArray();
         *      topicPartitions.Add(topicPartition);
         *  }
         *  TopicPartitions = topicPartitions.ToArray();
         * }*/

        public ProduceRequest(String topic,
                              Int32 partition,
                              IList <Message> messages,
                              AcknowlegeStrategy strategy = AcknowlegeStrategy.Written,
                              MessageCodec codec          = MessageCodec.None)
            : base(ApiKey.ProduceRequest)
        {
            if (String.IsNullOrWhiteSpace(topic))
            {
                throw new ArgumentOutOfRangeException("topic");
            }
            if (messages == null || messages.Count == 0)
            {
                throw new ArgumentOutOfRangeException("messages");
            }

            var messageEntities = new MessageSetDetail[messages.Count];

            for (int i = 0; i < messageEntities.Length; i++)
            {
                var messageSet = messageEntities[i] = new MessageSetDetail();
                messageSet.Message = new MessageSetItem();
                //messageSet.Message.Attributes = codec; //Error when using nocompress enum
                if (messages[i].Key != null)
                {
                    messageSet.Message.Key = Encoding.UTF8.GetBytes(messages[i].Key);
                }
                if (messages[i].Value != null)
                {
                    messageSet.Message.Value = Encoding.UTF8.GetBytes(messages[i].Value);
                }
            }

            RequiredAcks = strategy; //important
            Timeout      = 10;

            if (codec == MessageCodec.None)
            {
                TopicPartitions = new[] {
                    new ProduceRequestTopicPartition {
                        TopicName = topic,
                        Details   = new [] {
                            new ProduceRequestTopicDetail {
                                Partition  = partition,
                                MessageSet = new MessageSet {
                                    Items = messageEntities
                                }
                            }
                        }
                    }
                };
            }
            else if (codec == MessageCodec.Gzip)
            {
                TopicPartitions = new[] {
                    new ProduceRequestTopicPartition {
                        TopicName = topic,
                        Details   = new [] {
                            new ProduceRequestTopicDetail {
                                Partition  = partition,
                                MessageSet = new GZipMessageSet {
                                    Items = messageEntities
                                }
                            }
                        }
                    }
                };
            }
            else
            {
                throw new ArgumentOutOfRangeException("codec", String.Format("{0} not support", codec));
            }
        }
Exemple #4
0
 public Int64 Produce(String topic, Int32 partition, IList <String> messages,
                      AcknowlegeStrategy strategy = AcknowlegeStrategy.Written, MessageCodec codec = MessageCodec.None)
 {
     return(Produce(topic, partition, messages.Select(x => (Message)x).ToArray(), strategy, codec));
 }