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

相关推荐
q***72871 小时前
Spring Boot集成Kafka:最佳实践与详细指南
spring boot·kafka·linq
zl9798992 小时前
RabbitMQ-延迟队列
分布式·rabbitmq
-大头.3 小时前
深入解析ZooKeeper核心机制
分布式·zookeeper·wpf
s***4536 小时前
【RabbitMQ】超详细Windows系统下RabbitMQ的安装配置
windows·分布式·rabbitmq
jinxinyuuuus7 小时前
Info Flow:分布式信息采集、数据去重与内容分级的工程实现
人工智能·分布式·程序人生·生活
charlie11451419110 小时前
从 0 开始:在 WSL + VSCode 上利用 Maven 构建 Java Spring Boot 工程
java·笔记·vscode·后端·学习·maven·springboot
q***062917 小时前
IoT DC3 是一个基于 Spring Cloud 的开源的、分布式的物联网(IoT)平台本地部署步骤
物联网·spring cloud·开源
WHFENGHE19 小时前
输电线路分布式故障定位在线监测装置:技术解析与实际应用价值
分布式
johnny23321 小时前
Kafka系列之脚本使用
kafka