当我们发送消息到 Kafka后,有时我们需要确认消息是否发送成功,如果消息发送失败,就要重新发送或者执行对应的业务逻辑。下面分别演示如何在异步或者同步发送消息时,获取发送结果。
四、生产者2:消息回调、同步异步发送消息
1,获取异步发送消息的结果
(1)默认情况下 KafkaTemplate发送消息是采取异步方式,并且 kafkaTemplate提供了一个回调方法 addCallback,我们可以在回调方法中监控消息是否发送成功或在失败时做补偿处理:
@RestController
public class KafkaProducer {
@Autowired
private KafkaTemplate kafkaTemplate;
// 发送消息
@GetMapping("/test")
public void test() {
kafkaTemplate.send("topic1", "消息回调测试").addCallback(success -> {
// 消息发送到的topic
String topic = success.getRecordMetadata().topic();
// 消息发送到的分区
int partition = success.getRecordMetadata().partition();
// 消息在分区内的offset
long offset = success.getRecordMetadata().offset();
System.out.println("发