消息队列之-springcloud-mq-stream 学习

背景:

        开发中我们往往需要用到mq中间件进行消息处理,但是市面上的mq中间件实在太多了,导致我们在集成过程中困难重重,尤其在微服务当中,比如我们有一个订单模块、物流模块 他们都用到了mq,订单用的是rabbitmq 物流用的是kafka 导致当我们需要向这两个模块推送mq消息时,需要考虑两种mq的对接方式,非常麻烦。由此当我们学习了springcloud-mq-stream后,这个问题就不算问题了。废话不多说,直接上代码

我们创建两个服务:服务A 生产者、服务B消费者

服务A 和服务B依赖与配置 

pom依赖:项目中我用的是rabbitmq

       <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-kafka</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-rocketmq</artifactId>
            <optional>true</optional>
        </dependency>

yaml:

spring:
  cloud: 
   stream:
      function:
        definition: myTopicC  #函数 bean
      bindings:
        myTopicC-in-0:
          destination: myTopic
          group: my_input_group
        myTopicC-out-0:
          destination: myTopic

服务B消费消息  这里的

myTopicC对应于配置文件中的function中配置的函数bean
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.Message;

import java.util.function.Consumer;

/**
 * @author yangjie
 * @date 13/2/2025 下午 3:58
 * @description
 */
@Configuration
public class MeaageReceiver {

    @Bean
    public Consumer<Message<String>> myTopicC() {
        return (data) -> {
            System.out.println("收到消息:" + data.getPayload());
            System.out.println("收到消息 getHeaders :" + data.getHeaders());

        };
    }
}

服务A发送消息

/**
 * @author yangjie
 * @date 2024/12/31 17:35
 * @description
 */
@RestController
@RequestMapping("/test")
@Slf4j
public class TestController {  
    @Autowired
    private StreamBridge streamBridge;
   
    @PostMapping("/sendStreamMessage")
    public Results sendStreamMessage(@RequestBody Map<String,Object> map) {
        streamBridge.send("myTopicC-out-0", MessageBuilder.withPayload(JSONUtil.toJsonStr(map)).setHeader("for","这是一个请求头!!").build());
        return Results.ok("hello");
    }
}

以上代码就写完了,进行测试 调用服务A的接口

服务B收到消息进行消费哦

我们在看看 rabbitmq management

消息消费

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

likesyour

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值