SpringCloudStream+RocketMQ多topic

之前写过两篇关于SpringCloudStream文章

spring-cloud-stream版本升级,告别旧注解@EnableBinding,拥抱函数式编程_spring-cloud-stream output注解没有了-CSDN博客

SpringCloudStream+RocketMQ事务消息配置_spring-cloud-starter-stream-rocketmq-CSDN博客

提到了一个多topic问题,在不配置spring.cloud.stream.function.definition的情况下只能配置一个in和一个out,这篇文章来解决这个问题。

根据上面的第一篇文章续写代码

一、续写生产者

1.写配置

在bindings后面添加即可,这里给出完整配置

复制代码
spring:
  application:
    name: provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        namespace: local
        username: nacos
        password: nacos
    stream:
      rocketmq:
        binder:
          name-server: 127.0.0.1:9876
      bindings:
        ## 新版本固定格式  channel名字-{out/in}-{index}
        addBounsChannel-out-0:
          destination: add-bouns
          group: bouns-producer-group
        secondChannel-out-0:
          destination: second
          group: second-producer-group
        source-out-0:
          destination: third
          group: third-producer-group
server:
  port: 8081

2.写代码

同样的使用streamBridge.send发消息

复制代码
public void sendMqSecondChannel() {
        streamBridge.send("secondChannel-out-0", "sendMqSecondChannel from Provider!");
    }

二、续写消费者

1.写配置

多个消费者时,需要在spring.cloud.stream.function.definition 定义bean名称,多个时用分号分隔

给出完整yaml代码

复制代码
spring:
  application:
    name: consumer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        namespace: local
        username: nacos
        password: nacos
    stream:
      function:
        definition: addBounsChannel;secondChannel;source
      rocketmq:
        binder:
          name-server: 127.0.0.1:9876
      bindings:
        ## 新版本固定格式  channel名字-{out/in}-{index}
        addBounsChannel-in-0:
          destination: add-bouns
          group: bouns-consumer-group
        secondChannel-in-0:
          destination: second
          group: second-consumer-group
        source-in-0:
          destination: third
          group: third-consumer-group
server:
  port: 8082

2.写代码

跟之前一样,定义bean的Consumer

复制代码
   @Bean
    public Consumer<String> secondChannel() {
        return message -> {
            System.out.println("secondChannel消费消息:" + message);
        };
    }

三、常见问题

1.有Consumer必定会有Supplier,为什么不用Supplier发消息

Supplier也需要配置成@Bean,Supplier也跟Consumer一样用的监听模式,启动后不做处理会一直发,不如streamBridge.send发送灵活,这篇文章也有Supplier发送的例子可供参考Kafka Streams with Spring Cloud Stream - Spring Cloud

2.本文完整项目示例代码

【免费】springcloud-stream-rocketmq多topic示例代码资源-CSDN文库

相关推荐
卷毛的技术笔记11 小时前
从“拆东墙补西墙”到“最终一致”:分布式事务在Spring Boot/Cloud中的破局之道
java·spring boot·分布式·后端·spring cloud·面试·rocketmq
qq_2975746718 小时前
RocketMQ 系列文章(进阶篇第 4 篇):死信队列与延迟消息实战指南
rocketmq
KAI丶20 小时前
【RocketMQ】dashboard消息展示重复
rocketmq
Wmenghu20 小时前
Ubuntu 安装 RocketMQ 5.x + Dashboard 完整教程
linux·ubuntu·rocketmq
QC·Rex3 天前
消息队列架构设计 - Kafka/RocketMQ/RabbitMQ 深度对比与实战
kafka·rabbitmq·rocketmq
qq_297574676 天前
RocketMQ系列文章(入门篇第6篇):延时消息+顺序消息实战
spring boot·rocketmq·java-rocketmq
刘~浪地球10 天前
消息队列--RocketMQ 架构设计与优化
架构·rocketmq
Rick199312 天前
rabbitmq, rocketmq, kafka这三种消息如何分别保住可靠性,顺序性,以及应用场景?
kafka·rabbitmq·rocketmq
有梦想的小何13 天前
从0到1搭建可靠消息链路:RocketMQ重试 + Redis幂等实战
java·redis·bootstrap·rocketmq
鬼先生_sir13 天前
SpringCloud-Stream + RocketMQ/Kafka
spring cloud·kafka·rocketmq·stream