一、引入spring-kafka的maven依赖

<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>2.5.4.RELEASE</version>
</dependency>
方式一、创建springboot-web项目,自动引入(本文以此为例创建)
  1. 打开IDEA-File-New-Project,选择Spring Initializr初始化方式,Next,Next
  2. 选中Web中的Spring Web依赖,点击添加
  3. 选中Messaging中的Spring for Apache Kafka依赖,点击添加
  4. 创建项目
方式二、创建maven项目,手动引入
  1. 打开IDEA-File-New-Project,选择Maven初始化方式
  2. 添加如下依赖到pom.xml文件
  3. 经过创建启动类,构造Web环境后,剩余操作跟方式一类似。
    <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
</dependencies>

二、生产者demo代码

step1:application.properties配置文件中,只开producer的配置,将consumer的配置注释

server.port=8080

#kafka
spring.kafka.bootstrap-servers=0.0.0.0:9092 #kafka producer
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.acks=all
spring.kafka.producer.retries=0 #kafka consumer
#spring.kafka.consumer.group-id=group_id
#spring.kafka.consumer.enable-auto-commit=true
#spring.kafka.consumer.auto-commit-interval=5000
#spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
#spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer

step2:spring会自动加载这些配置,初始化生产者,其使用方式如下:

直接调用方式

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; /**
* kafka 生产者样例代码
* @author cavan
*/
@RestController
@RequestMapping("/kafka")
public class KafkaController {
private static final Logger LOGGER = LoggerFactory.getLogger(KafkaController.class); private static final String TOPIC = "topic-test"; @Autowired
private KafkaTemplate<String, String> kafkaTemplate; @PostMapping(value = "/publish")
public String sendMessageTokafkaTopic(@RequestParam("message") String message) {
LOGGER.info(String.format("------ Producing message ------ %s", message));
kafkaTemplate.send(TOPIC, message);
return "ok";
}
}

封装后调用

封装代码

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service; /**
* kafka producer
*
* @author cavan
*/
@Service
public class Producer {
private static final Logger LOGGER = LoggerFactory.getLogger(Producer.class); @Autowired
private KafkaTemplate<String, String> kafkaTemplate; public void sendMessage(String topic, String message) {
LOGGER.info(String.format("Producing message is: %s", message));
kafkaTemplate.send(topic, message);
}
}

调用代码

import com.example.demo.kafka.Producer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; /**
* kafka send message
*
* @author cavan
*/
@RestController
@RequestMapping("/kafka")
public class KafkaController {
private static final Logger LOGGER = LoggerFactory.getLogger(KafkaController.class); private static final String TOPIC = "topic-test"; @Autowired
private Producer producer; @PostMapping(value = "/producer")
public String sendMessageTokafka(@RequestParam("message") String message) {
LOGGER.info(String.format("------ Producing message ------ %s", message));
producer.sendMessage(TOPIC, message);
return "ok";
}
}

postman调用接口测试

生产者日志:

2021-10-08 19:26:50.205  INFO 20836 --- [nio-8080-exec-2] c.e.demo.controller.KafkaController      : ------ Producing message ------ success

三、消费者demo代码

step1:application.properties配置文件中,增加consumer的配置

server.port=8080

#kafka
spring.kafka.bootstrap-servers=0.0.0.0:9092 #kafka producer
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.acks=all
spring.kafka.producer.retries=0 #kafka consumer
spring.kafka.consumer.group-id=group_id
spring.kafka.consumer.enable-auto-commit=true
spring.kafka.consumer.auto-commit-interval=5000
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer

step2:spring会自动加载这些配置,初始化消费者,其使用方式如下:

import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Service; /**
* kafka consumer demo
*
* @author cavan
*/
@Service
public class Consumer {
private static final Logger LOGGER = LoggerFactory.getLogger(Consumer.class); @KafkaListener(id = "test", topics = "topic-test")
public void listen(ConsumerRecord<?, ?> record) {
LOGGER.info(
"topic ={},partition={},offset={},customer={},value={}",
record.topic(),
record.partition(),
record.offset(),
record.key(),
record.value());
}
}

消费成功日志:

2021-10-08 19:55:23.004  INFO 11340 --- [nio-8080-exec-2] o.a.kafka.common.utils.AppInfoParser     : Kafka version: 2.7.1
2021-10-08 19:55:23.004  INFO 11340 --- [nio-8080-exec-2] o.a.kafka.common.utils.AppInfoParser     : Kafka commitId: 61dbce85d0d41457
2021-10-08 19:55:23.004  INFO 11340 --- [nio-8080-exec-2] o.a.kafka.common.utils.AppInfoParser     : Kafka startTimeMs: 1633694123004
2021-10-08 19:55:23.117  INFO 11340 --- [ad | producer-1] org.apache.kafka.clients.Metadata        : [Producer clientId=producer-1] Cluster ID: Lx7DFjG5SYuOLlJKtz2NCQ
2021-10-08 19:55:23.236  INFO 11340 --- [     test-0-C-1] com.example.demo.kafka.Consumer          : topic =topic-test,partition=0,offset=31,customer=null,value=success

SpringBoot系列(四)使用spring-kafka实现生产者消费者demo代码的更多相关文章

  1. Linux 进程间通信(包含一个经典的生产者消费者实例代码)

    前言:编写多进程程序时,有时不可避免的需要在多个进程之间传递数据,我们知道,进程的用户的地址空间是独立,父进程中对数据的修改并不会反映到子进程中,但内核是共享的,大多数进程间通信方式都是在内核中建立一 ...

  2. Java 学习笔记 使用并发包ReentrantLock简化生产者消费者模式代码

    说明 ReentrantLock是java官方的一个线程锁类,ReentarntLock实现了Lock的接口 我们只需要使用这个,就可以不用使用synchronized同步关键字以及对应的notify ...

  3. 生产者消费者demo

    using System; using System.Collections.Generic; using System.Threading; namespace 生产者消费者 { class Pro ...

  4. springboot系列四、配置模板引擎、配置热部署

    一.配置模板引擎 在之前所见到的信息显示发现都是以 Rest 风格进行显示,但是很明显在实际的开发之中,所有数据的显示最终都应该交由页面完成,但是这个页面并不是*.jsp 页面,而是普通的*.html ...

  5. SpringBoot系列四:SpringBoot开发(改变环境属性、读取资源文件、Bean 配置、模版渲染、profile 配置)

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念 SpringBoot 开发深入 2.具体内容 在之前已经基本上了解了整个 SpringBoot 运行机制,但是也需要清 ...

  6. Spring系列(四):Spring AOP详解和实现方式(xml配置和注解配置)

    参考文章:http://www.cnblogs.com/hongwz/p/5764917.html 一.什么是AOP AOP(Aspect Oriented Programming),即面向切面编程, ...

  7. springboot系列四:springboot整合mybatis jsp

    一.用IDEA 创建maven项目 项目目录结构 1.添加pom jar依赖 <?xml version="1.0" encoding="UTF-8"?& ...

  8. 基于Kafka的生产者消费者消息处理本地调试

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/68174111冷血之心的博客) Kafka下载地址:http://d ...

  9. java kafka 生产者消费者demo

    一.修改kafka   server.porperties的ip是你本机的ip listeners=PLAINTEXT://192.168.111.130:9092 二.生产者的例子 import o ...

  10. [b0029] python 归纳 (十四)_队列Queue实现生产者消费者

    # -*- coding: UTF-8 -*- """ 多线程的生产者,消费者 使用队列Queue """ import Queue imp ...

随机推荐

  1. 力扣69(java&python)-x的平方根(简单)

    题目: 给你一个非负整数 x ,计算并返回 x 的 算术平方根 . 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 . 注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0. ...

  2. 力扣306(java)-累加数(中等)

    题目: 累加数 是一个字符串,组成它的数字可以形成累加序列. 一个有效的 累加序列 必须 至少 包含 3 个数.除了最开始的两个数以外,序列中的每个后续数字必须是它之前两个数字之和. 给你一个只包含数 ...

  3. EventBridge 与 FC 一站式深度集成解析

    ​简介:本篇文章通过对 EventBridge 与 FC 一站式深度集成解析和集成场景的介绍,旨在帮助大家更好的了解面对丰富的事件时,如何使用 EventBridge 与 FC 的一站式集成方案,快速 ...

  4. Raft 共识算法1-Raft基础

    Raft 共识算法1-Raft基础 Raft算法中译版地址:http://www.redisant.cn/etcd/contact 英原论文地址:https://raft.github.io/raft ...

  5. ESP32 + IDF + LED

    一.开发板 ESP32-S3-DevKitC-1 管脚布局 由于这个程序控制比较简单,就不赘述了,直接看程序. 二.程序 #include "freertos/FreeRTOS.h" ...

  6. STM32F10x 串口使用DMA

    一.DMA简介 DMA(Direct Memory Access,直接存储器访问) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载.否则,CPU 需要 ...

  7. protobuf 文档

    文档地址: https://golang-tech-stack.com/tutorial/pb 学习视频: https://www.bilibili.com/video/BV1Y3411j7EM?p= ...

  8. LogAgen的工作流程

    LogAgen的工作流程: 一.读日志 --tailf 第三方库 新建tail_test/main.go package main import ( "fmt" "git ...

  9. HJ212-2017协议数据采集和接收

    1.客户端TCP和UDP的数据发送工具 工具和软件下载页面如下:http://www.zlmcu.com/document/tcp_debug_tools.html 2.服务端数据接收监控软件 IPA ...

  10. 避免Java异常栈被吞掉

    The compiler in the server VM now provides correct stack backtraces for all "cold" built-i ...