/// <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); }
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); } } }
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); }