以下是基于 Spring Cloud Alibaba 2025(假设为最新版本)整合 Kafka 的完整实现文档和代码示例,包含消息发送与监听的核心配置和代码。
环境准备
- JDK 17+
- Spring Boot 3.x
- Spring Cloud Alibaba 2025.x
- Kafka 3.x(单机或集群)
- Maven/Gradle
添加依赖
在 pom.xml 中添加 Kafka 和 Spring Cloud Stream 依赖:
xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-kafka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
配置文件
application.yml 配置 Kafka 连接和主题绑定:
yaml
spring:
kafka:
bootstrap-servers: localhost:9092
producer:
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
consumer:
group-id: demo-group
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
auto-offset-reset: earliest
cloud:
stream:
bindings:
output:
destination: demo-topic
content-type: application/json
input:
destination: demo-topic
content-type: application/json
消息发送接口
定义消息发送的绑定接口:
java
public interface KafkaSource {
String OUTPUT = "output";
@Output(OUTPUT)
MessageChannel output();
}
消息监听接口
定义消息监听的绑定接口:
java
public interface KafkaSink {
String INPUT = "input";
@Input(INPUT)
SubscribableChannel input();
}
消息生产者实现
通过 KafkaSource 发送消息:
java
@Service
@EnableBinding(KafkaSource.class)
public class MessageProducer {
private final KafkaSource source;
public MessageProducer(KafkaSource source) {
this.source = source;
}
public void send(String message) {
source.output().send(MessageBuilder.withPayload(message).build());
}
}
消息消费者实现
通过 KafkaSink 监听消息:
java
@Service
@EnableBinding(KafkaSink.class)
public class MessageConsumer {
@StreamListener(KafkaSink.INPUT)
public void handle(String message) {
System.out.println("Received message: " + message);
}
}
启动类配置
确保启动类开启绑定功能:
java
@SpringBootApplication
@EnableBinding({KafkaSource.class, KafkaSink.class})
public class KafkaApplication {
public static void main(String[] args) {
SpringApplication.run(KafkaApplication.class, args);
}
}
测试用例
编写测试验证消息发送和接收:
java
@SpringBootTest
class KafkaIntegrationTest {
@Autowired
private MessageProducer producer;
@Test
void testSendAndReceive() {
producer.send("Test message");
// 监听控制台输出或通过断言验证
}
}
注意事项
-
主题创建 :确保 Kafka 中已存在
demo-topic,或配置自动创建:yamlspring: kafka: admin: properties: auto.create.topics.enable: true -
序列化:若传输复杂对象,需自定义序列化器。
-
错误处理 :通过
@ServiceActivator处理消费异常:java@ServiceActivator(inputChannel = "demo-topic.errors") public void handleError(ErrorMessage error) { System.err.println("Error occurred: " + error.getPayload()); }
以上代码实现了 Spring Cloud Alibaba 2025 与 Kafka 的基本集成,涵盖消息发送、监听及配置。根据实际需求调整主题、序列化方式和错误处理逻辑。