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就报如图所示的错

相关推荐
计算机毕业设计杰瑞1 分钟前
【计算机毕设精品】基于SpringBoot的一体化教务与学业质量管理系统的设计与实现,附源码_增删改查_java项目_可完美运行部署_网站项目
java·spring boot·课程设计
笔墨登场说说2 小时前
centos 8 使用 kafka_2.13-4.3.1.tgz 安装kafka
linux·kafka·centos
guo_wen_qiang2 小时前
kafka一直restarting,报错InconsistentClusterIdException
分布式·kafka
大侠归来2 小时前
Spring Boot 2.1 → 3.5 迁移推演:从实战出发的完整路线图
java·spring boot·后端
Sweet锦3 小时前
jDCS 开源项目:面向工业现场的 Modbus RTU 数据采集基础框架
java·spring boot·物联网·开源
海马3 小时前
Spring Boot 开发知识整理
java·spring boot·后端
谢亮_vipxieliang3 小时前
Spring Boot 3.x 从零开始——环境搭建与第一个 REST 项目
java·spring boot·后端
FYKJ_20103 小时前
django个性化新闻推荐35173-计算机课程设计、毕业设计
java·spring boot·后端·python·架构·django·课程设计
今年下半年3 小时前
【消息队列】Spring Boot 集成 Kafka 消息队列:确保消费完成(手动提交偏移量+幂等判断+失败重试机制)
spring boot·kafka·幂等·失败重试
计算机毕设定制辅导-无忧学长3 小时前
《校园食堂在线订餐小程序的设计与实现》
java·vue.js·spring boot·微信小程序·uniapp·校园食堂在线订餐小程序