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

相关推荐
进阶的小名3 小时前
[超轻量级延时队列(MQ)] Redis 不只是缓存:我用 Redis Stream 实现了一个延时MQ(自定义注解方式)
java·数据库·spring boot·redis·缓存·消息队列·个人开发
y***n6144 小时前
springboot项目架构
spring boot·后端·架构
qq_318121594 小时前
互联网大厂Java面试故事:支付与金融服务微服务架构、消息队列与AI风控全流程解析
java·spring boot·redis·微服务·kafka·支付系统·金融服务
亲爱的非洲野猪5 小时前
SpringBoot启动流程深度剖析:从@SpringBootApplication到Servlet容器就绪
hive·spring boot·servlet
OpenTiny社区5 小时前
TinyPro v1.4.0 正式发布:支持 Spring Boot、移动端适配、新增卡片列表和高级表单页面
java·前端·spring boot·后端·开源·opentiny
计算机毕设指导66 小时前
基于微信小程序民宿预订管理系统【源码文末联系】
java·spring boot·mysql·微信小程序·小程序·tomcat·maven
爱码猿6 小时前
Springboot结合thymeleaf模板生成pdf文件
spring boot·后端·pdf
Coder_Boy_8 小时前
基于SpringAI的在线考试系统软件系统验收案例
人工智能·spring boot·软件工程·devops
qq_12498707538 小时前
基于SSM框架的智能密室逃脱信息管理系统(源码+论文+部署+安装)
java·大数据·人工智能·spring boot·后端·毕业设计·计算机毕业设计
用户2190326527358 小时前
Spring Boot Admin终极监控方案:从零搭建企业级微服务监控平台,含高可用集群配置
spring boot·微服务·监控