springboot集成kafka
主要分为以下几步:
一、引入依赖
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka-test</artifactId>
<scope>test</scope>
</dependency>
二、添加配置
spring: kafka: producer: bootstrap-servers: 127.0.0.1:9092 key-serializer: org.apache.kafka.common.serialization.StringSerializer value-serializer: org.apache.kafka.common.serialization.StringSerializer consumer: bootstrap-servers: 127.0.0.1:9092 group-id: aicloud
三、发送消息、消费消息
发送消息需要写一个接口,消费消息只要开启一个监听即可
package com.spring.aicloud.controller; import cn.hutool.core.util.StrUtil; import jakarta.annotation.Resource; import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.core.KafkaTemplate; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/kafka") public class KafkaController { @Resource private KafkaTemplate<String,String> template; private static final String TOPIC = "aicloud-test-topic"; /** * 发送消息 * @param msg * @return */ @RequestMapping("/send/{msg}") public String test(@PathVariable String msg) { if (StrUtil.isEmpty(msg)){ return "msg can not be empty"; } template.send(TOPIC, msg); return "kafka test"; } /** * 接收消息 * @param msg */ @KafkaListener(topics = {TOPIC}) public void listen(String msg) { System.out.println("kafka receive: " + msg); } }
四、也可以在页面看到消息。需要注意的是主题要对应上

五、如何开启手动确认
默认是自动确认的,那消费者的执行业务完成,我们开启手动确认,保证消息能够正常消费完成
1、在配置文件中添加配置
spring:
kafka:
listener:
ack-mode: manual
2、在接口中添加一个参数Acknowledgment
/** * 接收消息 * @param msg */ @KafkaListener(topics = {TOPIC}) public void listen(String msg, Acknowledgment ack) { System.out.println("kafka receive: " + msg); ack.acknowledge(); //手动确认 }
浙公网安备 33010602011771号