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 的基本集成,涵盖消息发送、监听及配置。根据实际需求调整主题、序列化方式和错误处理逻辑。

相关推荐
susu108301891110 小时前
springboot3.5.8整合minio8.5.9
java·springboot
myzshare11 小时前
实战分享:我是如何用SSM框架开发出一个完整项目的
java·mysql·spring cloud·微信小程序
oMcLin13 小时前
如何在Oracle Linux 8.4上搭建并优化Kafka集群,确保高吞吐量的实时数据流处理与消息传递?
linux·oracle·kafka
码农水水13 小时前
中国邮政Java面试:热点Key的探测和本地缓存方案
java·开发语言·windows·缓存·面试·职场和发展·kafka
a努力。14 小时前
国家电网Java面试被问:最小生成树的Kruskal和Prim算法
java·后端·算法·postgresql·面试·linq
sww_102614 小时前
Openfeign源码浅析
java·spring cloud
前端不太难16 小时前
从本地到多端:HarmonyOS 分布式数据管理实战详解
分布式·状态模式·harmonyos
Yeats_Liao17 小时前
MindSpore开发之路(二十五):融入开源:如何为MindSpore社区贡献力量
人工智能·分布式·深度学习·机器学习·华为·开源
DKunYu18 小时前
9.熔断和限流 - Alibaba Sentinel
spring cloud·微服务·sentinel
我爱娃哈哈19 小时前
SpringBoot + Seata + Nacos:分布式事务落地实战,订单-库存一致性全解析
spring boot·分布式·后端