SpringBoot+Kafka示范源码
- 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
- 配置文件 application.yml
spring:
kafka:
bootstrap-servers: 192.168.108.129:9092
producer:
retries: 0
batch-size: 16384
buffer-memory: 33554432
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
properties:
linger.ms: 1
consumer:
enable-auto-commit: true
auto-commit-interval: 100ms
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
properties:
session.timeout.ms: 15000
template:
default-topic: dealTopic
server:
port: 80
- 配置类
- KafkaTopicProperties
@Configuration
@Component
@ConfigurationProperties("spring.kafka")
public class KafkaTopicProperties implements Serializable {
private String groupId;
private String[] topicName;
public String getGroupId() {
return groupId;
}
public void setGroupId(String groupId) {
this.groupId = groupId;
}
public String[] getTopicName() {
return topicName;
}
public void setTopicName(String[] topicName) {
this.topicName = topicName;
}
}
- KafkaTopicConfiguration
@Configuration
@EnableConfigurationProperties(KafkaTopicProperties.class)
public class KafkaTopicConfiguration {
private final KafkaTopicProperties properties;
@Autowired
public KafkaTopicConfiguration(KafkaTopicProperties kafkaTopicProperties) {
this.properties = kafkaTopicProperties;
}
@Bean
public String[] kafkaTopicName() {
return properties.getTopicName();
}
@Bean
public String topicGroupId() {
return properties.getGroupId();
}
}
- 消费者:监听器
@Component
public class KafkaListenerTestTopic {
/**
* 监听方式1
* @param message
*/
@KafkaListener(topics = {"test_topic1"},groupId = "test_group")
public void onMessage(String message){
System.out.println("处理消息 "+message);
}
/**
* 监听方式2
* @param record
*/
@KafkaListener(topics = "test_topic2", groupId = "topicGroupId")
public void processMessage(ConsumerRecord<Integer, String> record) {
System.out.println("kafka processMessage start");
System.out.println("processMessage, topic = {}, msg = {}"+ record.topic()+record.value());
// do something ...
System.out.println("kafka processMessage end");
}
}
- 生产者:发消息
@RestController
@RequestMapping("/kafka")
public class KafkaConsumerTestTopic {
@Autowired
private KafkaTemplate<String,Object> kafkaTemplate;
@PostMapping("/send1")
public String send1(String topic,String message){
try {
kafkaTemplate.send(topic,message);
}catch (Exception e){
e.printStackTrace();
return e.getMessage();
}
return "发送成功";
}
@PostMapping("/send2")
public String send2(String topic,String message){
System.out.println("kafka sendMessage start");
ListenableFuture<SendResult<String, Object>> future = kafkaTemplate.send(topic, message);
future.addCallback(new ListenableFutureCallback<SendResult<String, Object>>() {
@Override
public void onSuccess(SendResult<String, Object> stringObjectSendResult) {
System.out.println("kafka sendMessage success topic = {}, data = {}"+topic+ message);
}
@Override
public void onFailure(Throwable ex) {
System.out.println("kafka sendMessage error, ex = {}, topic = {}, data = {}"+ex.toString()+ topic+ message);
}
});
System.out.println("kafka sendMessage end");
return "发送成功";
}
}
- 完整pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--导入FastJson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
<!-- configuration properties-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
本文来自博客园,作者:HumorChen99,转载请注明原文链接:https://www.cnblogs.com/HumorChen/p/18039696
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~