springboot项目整合kafka实现消息队列

一、Docker镜像、容器准备:

1.1拉取镜像:

前提是虚拟机安装了docker,可以自行看其他文章进行安装

bash 复制代码
docker pull ubuntu/kafka 
docker pull zookeeper

1.2运行容器

先启动zookeeper容器,因为kafka依赖于zookeeper

bash 复制代码
docker run -d \
	--network zk_k\ #指定网络
​	-p 2181:2181 \ #暴露端口
​	-v /mydata/zookeeper/data:/data  \  #数据挂载,先创建/mydata/zookeeper/data目录
​	--name zookeeper \ #指定容器名称
 	 zookeeper:latest  #镜像名称

启动kafka容器

bash 复制代码
# 启动 kafka
docker run -d  -p 9092:9092 \
--name kafka \
--network hmall \
-e KAFKA_BROKER_ID=0 \
-e KAFKA_ZOOKEEPER_CONNECT=192.168.31.130:2181 \ # 连接上一步运行的zookeeper容器
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.31.130:9092 \ # kafka服务监听设置,IP为当前主机IP
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \ # 默认就好了
-v /mydata/kafka/config:/opt/kafka/config \ # 数据挂载,同样先创建好目录,上一步类似
-v /mydata/kafka/logs:/opt/kafka/logs \
ubuntu/kafka:latest

本文是单机部署,有兴趣做集群部署的可以参考文章

二、创建一个springboot项目

2.1导入kafka依赖

xml 复制代码
 <!--kafka-->
 <dependency>
      <groupId>org.springframework.kafka</groupId>
      <artifactId>spring-kafka</artifactId>
 </dependency>

2.2application.properties配置

先去虚拟机/mydata/kafka/config目录修改consumer.properties文件,如图所示

同样provider.properties也要改

yml 复制代码
#运行kafka服务的主机IP和kafka端口
spring.kafka.bootstrap-servers=192.168.31.130:9092
#组id,在consumer.properties文件修改 
spring.kafka.consumer.group-id=my-group
#表示开启消费者自动提交偏移量
spring.kafka.consumer.enable-auto-commit=true
#表示自动提交偏移量的时间间隔为 3000 毫秒。
spring.kafka.consumer.auto-commit-interval=3000

2.3编写消息生产者

java 复制代码
@Component
@Slf4j
public class KafkaProvider {
	//kafka依赖注入
    @Autowired
    private KafkaTemplate kafkaTemplate;
	
    public void send(String topic, String message) {
        log.info("发送消息到Kafka topic: {}; 消息内容: {}", topic, message);
        kafkaTemplate.send(topic, message);//执行发送消息
        log.info("生产者消息发送成功");
    }
}

2.4编写消息消费者

java 复制代码
@Component
@Slf4j
public class KafkaConsumer {
	//对主题topic_name进行监听,当生产者对主题topic_name生产消息,该消费者就会监听到,然后进行消息消费
    @KafkaListener(topics = {"topic_name"})
    //ConsumerRecord 对象存储消息及对消息的处理
    public void receive(ConsumerRecord record){
    	//监听到消息后的业务逻辑处理
        log.info("消费者接收到消息 message: {}", record.value());
    }
}

2.5测试

java 复制代码
@RestController
public class KafkaController {

    @Autowired
    private KafkaProvider kafkaProvider;

    @RequestMapping("/send")
    public String send(String topic, String message) {
        kafkaProvider.send(topic,message);
        return "success";
    }
}

测试结果如图所示

浏览器发送消息如图

消费者消费了消息如图

生产者生产消息如图

踩坑

如果没有修改配置文件的server.properties里的advertised.listeners=PLAINTEXT://192.168.31.130:9092就报如图所示的错

相关推荐
paopaokaka_luck1 小时前
英语单词学习系统的设计与实现(基于艾宾浩斯遗忘曲线的智能复习机制、语音朗读、多题型测试与错题自动收录、Echarts图形化分析)
vue.js·spring boot·后端·echarts
梦想的颜色4 小时前
【Docker部署插件】:使用 Docker 部署生产级 Kafka 完整版教程
安全·docker·中间件·kafka·消息队列·docker-compose·后端开发
考虑考虑10 小时前
kafka4安装
后端·kafka·自动化运维
爱敲代码的小鱼10 小时前
springboot原理篇:
java·spring boot·spring
默默敲代码的徐哥儿11 小时前
八股文整理——后端
java·开发语言·spring boot·后端·学习
牧小七11 小时前
宠物管理系统2026
spring boot
名字还没想好☜11 小时前
Spring Boot 全局异常处理:@ControllerAdvice 实战
java·spring boot·后端·spring·异常处理
宠友信息13 小时前
Redis 内容社区源码架构优化与即时通讯数据一致性处理
spring boot·后端·websocket·mysql·uni-app
hdsoft_huge13 小时前
SpringBoot系列06:RESTful接口开发,请求参数接收、全局跨域CORS完整配置
java·spring boot
小明bishe181 天前
计算机毕业设计之基于JAVA的植物科普网站
java·spring boot·spring·架构·课程设计