Spring Cloud Alibaba整合 Kafka 的完整实现

以下是基于 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");
        // 监听控制台输出或通过断言验证
    }
}

注意事项

  1. 主题创建 :确保 Kafka 中已存在 demo-topic,或配置自动创建:

    yaml 复制代码
    spring:
      kafka:
        admin:
          properties:
            auto.create.topics.enable: true
  2. 序列化:若传输复杂对象,需自定义序列化器。

  3. 错误处理 :通过 @ServiceActivator 处理消费异常:

    java 复制代码
    @ServiceActivator(inputChannel = "demo-topic.errors")
    public void handleError(ErrorMessage error) {
        System.err.println("Error occurred: " + error.getPayload());
    }

以上代码实现了 Spring Cloud Alibaba 2025 与 Kafka 的基本集成,涵盖消息发送、监听及配置。根据实际需求调整主题、序列化方式和错误处理逻辑。

相关推荐
阿里云云原生4 天前
数据链路再精简:Kafka 如何做到“零 ETL”一键写入 Apache Iceberg?
kafka
吃饱了得干活5 天前
Spring Cloud Gateway 微服务网关:路由、断言、过滤器
java·spring cloud
带刺的坐椅6 天前
Spring Boot → Solon 注解迁移实战指南:一张对照表说清楚
java·springboot·web·solon
阿里云云原生10 天前
告别冗长链路!Kafka × Table Bucket 实现开放表格式零 ETL 实时入湖
云原生·kafka
十五喵源码网16 天前
基于springboot2+vue2的租房管理系统
java·毕业设计·springboot·论文笔记
慧一居士16 天前
Feign的GET请求如何传递对象参数?
java·spring cloud
我登哥MVP16 天前
SpringCloud Alibaba 核心组件解析:服务链路追踪
java·spring boot·后端·spring·spring cloud·java-ee·maven
风吹夏回16 天前
RabbitMQ 核心术语 + Python pika 方法完整讲解
分布式·python·rabbitmq
慧一居士16 天前
SpringCloud 微服务Feigin 用的完整调用端和被调用的示例
java·spring cloud
风吹夏回16 天前
RabbitMQ 三种模式入门:HelloWorld、WorkQueue、PubSub
分布式·rabbitmq·ruby