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

相关推荐
Jackeyzhe2 小时前
从零学习Kafka:配置参数
kafka
编程彩机5 小时前
互联网大厂Java面试:从分布式架构到大数据场景解析
java·大数据·微服务·spark·kafka·分布式事务·分布式架构
難釋懷7 小时前
分布式锁-redission锁重试和WatchDog机制
分布式
kobe_t10 小时前
分布式定时任务系列14:XXL-job的注册模型
分布式
Knight_AL11 小时前
线程池满了怎么办?用 RabbitMQ 做任务补偿不丢失
分布式·rabbitmq·ruby
難釋懷13 小时前
分布式锁-redission锁的MutiLock原理
分布式
小北方城市网14 小时前
RabbitMQ 生产级实战:可靠性投递、高并发优化与问题排查
开发语言·分布式·python·缓存·性能优化·rabbitmq·ruby
乾元14 小时前
拒绝服务的进化:AI 调度下的分布式协同攻击策略
人工智能·分布式
编程彩机14 小时前
互联网大厂Java面试:从分布式事务到微服务优化的技术场景解读
java·spring boot·redis·微服务·面试·kafka·分布式事务
听麟15 小时前
HarmonyOS 6.0+ PC端多设备文件拖拽协同开发实战:手眼同行增强与分布式软总线深度应用
分布式·华为·harmonyos