修复数据生产的时候结果确认的BUG

This commit is contained in:
白茶清欢 2023-08-16 17:49:09 +08:00
parent 2e780f3379
commit 577ebc4c84

View File

@ -115,17 +115,15 @@ func (p *Producer) Async(data ProducerData) ProducerResult {
result := ProducerResult{} result := ProducerResult{}
p.asyncProducer.Input() <- p.buildMessage(data) p.asyncProducer.Input() <- p.buildMessage(data)
// 如果打开了Return.Successes配置则等同于同步方式 // 如果打开了Return.Successes配置则等同于同步方式
t := time.NewTicker(time.Second)
select { select {
case msg := <-p.asyncProducer.Successes(): case msg := <-p.asyncProducer.Successes():
result.Partition = msg.Partition result.Partition = msg.Partition
result.Offset = msg.Offset result.Offset = msg.Offset
case err := <-p.asyncProducer.Errors(): case err := <-p.asyncProducer.Errors():
result.Err = err result.Err = err
default: case <-t.C:
// 为什么要有default ? result.Err = errors.New("produce data wait result timeout")
// 则这段代码会挂住因为设置没有要求返回成功config.Producer.Return.Successes = false
// 那么在select等待的时候producer.Successes()不会返回producer.Errors()也不会返回(假设没有错误发生),就挂在这儿。
// 当然可以加一个default分支绕过去就不会挂住了
} }
return result return result
} }