/// <summary>
        /// 事务版本   貌似没必要 要求 配置TransactionalId,Acks必须等于all
        /// </summary>
        /// <param name="topic"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        public async Task <DeliveryResult <TKey, TValue> > ProduceAsync2(string topic, Message <TKey, TValue> message)
        {
            DeliveryResult <TKey, TValue> result = null;

            try
            {
                _producer.InitTransactions(DefaultTimeout);
                _producer.BeginTransaction();
                result = await this._producer.ProduceAsync(topic, message);

                _producer.CommitTransaction(DefaultTimeout);
            }
            catch (Exception)
            {
                _producer.AbortTransaction(DefaultTimeout);
                throw;
            }
            return(result);
        }
Exemplo n.º 2
0
        private void InitializeTransaction()
        {
            bool initTransaction = false;

            while (!initTransaction)
            {
                try
                {
                    producer.InitTransactions(configuration.TransactionTimeout);
                    initTransaction = true;
                }
                catch (KafkaRetriableException)
                {
                    initTransaction = false;
                }
                catch (KafkaException e)
                {
                    throw new StreamsException($"{logPrefix}Failed to initialize task {Id} due to timeout ({configuration.TransactionTimeout}).", e);
                }
            }
        }
Exemplo n.º 3
0
        private void SendMessages(IProducer <Null, byte[]> producer, KafkaSendMessageArgs args, byte[] data, byte[] dataGuid, string guid)
        {
            producer.InitTransactions(TimeSpan.FromSeconds(10));
            producer.BeginTransaction();

            for (int i = 0; i < args.MessageCount - 1; i++)
            {
                producer.Produce(args.Topic, new Message <Null, byte[]> {
                    Value = data
                });
            }

            producer.Produce(args.Topic, new Message <Null, byte[]> {
                Value = dataGuid
            });

            producer.CommitTransaction();

            var now = DateTimeOffset.Now.ToUnixTimeMilliseconds();

            SendInitialTestResult(args, guid, now);
            _logger.LogInformation($"Kafka sender: Guid = {guid} - Sent at: {DateTimeOffset.FromUnixTimeMilliseconds(now).AddHours(3).ToString("yyyy-MM-dd hh:mm:ss.fff tt")}"); //cuz im in +0300 atm
        }
 public void InitTransactions(TimeSpan timeout)
 {
     _producer.InitTransactions(timeout);
 }