杨运交头像
084-消息模块-深入 Spring Cloud Stream 配置——Kafka、RabbitMQ、NATS 横向对比封面图

084-消息模块-深入 Spring Cloud Stream 配置——Kafka、RabbitMQ、NATS 横向对比

084-消息模块-深入 Spring Cloud Stream 配置——Kafka、RabbitMQ、NATS 横向对比

本文章代码: gitee , gitcode , github

1. 配置结构共性

三个 profile 配置文件都包含了 spring.cloud.function.definition: sms,这是函数式定义,告诉框架将名为 sms 的 Consumer Bean 作为消息处理器。绑定配置中:

  • sms-out-0 和 sms-in-0 是系统自动生成的通道名称,规则为 {functionName}-{in/out}-{index}。
  • destination 是物理目的地(Kafka Topic / RabbitMQ Exchange / NATS Subject)。
  • content-type 统一为 JSON,Spring Cloud Stream 会自动序列化/反序列化 SmsMessage。
  • 输入通道的 group 用于消费者组,保证同一组内只有一个实例消费消息。

2. Kafka 专属配置

spring.kafka:
  bootstrap-servers: localhost:9092

Kafka Binder 依赖 spring-kafka,在 classpath 中自动配置。生产者可以额外配置 producer 属性,消费者可配置 consumer 属性(如 auto-offset-reset),但本例未显式设置。Kafka 的 group 对应消费者组 ID,多个实例共享组可实现分区消费。

3. RabbitMQ 专属配置

spring.rabbitmq:
  host: localhost
  port: 5672
  username: guest
  password: guest

Rabbit Binder 将 destination 映射为 Exchange,group 映射为 Queue 名称(实际为 destination.group)。绑定属性可设置 consumer.durable、producer.routing-key 等扩展。默认使用 Direct Exchange,但可自定义。

4. NATS 专属配置

nats.spring:
  server: nats://localhost:4222
  username: root
  password: root

NATS Binder 是 Spring Cloud Stream 的社区扩展(需要引入 spring-cloud-stream-binder-nats)。注意前缀为 nats.spring,而非 spring.nats。NATS 的 destination 即 Subject,group 对应 Queue Group,实现负载均衡。NATS 的持久化与 JetStream 相关,本例默认不启用。

5. 动态切换与依赖管理

要实现多 Profile 切换,需在 pom.xml 中同时引入三个 Binder 的 starter,如:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-stream-binder-kafka</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-stream-binder-nats</artifactId>
</dependency>

激活某个 Profile 时,对应的 Binder 会自动初始化,其他 Binder 不会加载(但 classpath 中存在,可以通过 spring.cloud.stream.default-binder 强制指定,或者按需排除)。

6. 生产环境建议

  • 为不同环境(dev/test/prod)配置独立的 Profile,并将中间件连接信息外置(如使用环境变量或配置中心)。
  • 适当设置 consumer.max-attempts、producer.retries 等重试策略。
  • 监控消息积压和消费延迟,可结合 Micrometer 指标。

7. 对比总结

特性KafkaRabbitMQNATS
模型Topic + PartitionExchange + QueueSubject + Queue Group
顺序保证分区内有序队列内有序(部分)无顺序(可借助 JetStream)
持久化默认持久化可选持久化内存/持久化(JetStream)
吞吐量高中等极高
适用场景日志、事件溯源传统任务、RPC微服务通信、低延迟

选择哪种中间件应依据业务需求,而 Spring Cloud Stream 让这种选择变得“无痛”。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/2403_86882821/article/details/169330476

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--