Spring Cloud Stream3.x整合RocketMQ

Spring Cloud Stream介绍

官网:https://spring.io/projects/spring-cloud-stream#overview
Spring Cloud Stream is a framework for building highly scalable event-driven microservices connected with shared messaging systems.

The framework provides a flexible programming model built on already established and familiar Spring idioms and best practices, including support for persistent pub/sub semantics, consumer groups, and stateful partitions.

目标

出于好奇且项目是微服务,所以想采用 Spring Cloud Stream一战,以前采用rocketmq-spring-boot-starter觉得挺好的

在这里插入图片描述

业务代码实操

引入依赖

		<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-rocketmq</artifactId>
            <!-- <spring.cloud.alibaba.version>2021.1</spring.cloud.alibaba.version> -->
            <version>2021.1</version>
        </dependency>

生产者端

配置application.yml

server:
  port: 8082

spring:
  application:
    name: bengdou-user-service
  cloud:
    # 注册中心
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
    stream:
      # Binding配置项,对应 Map<String, BindingProperties> bindings
      bindings:
        couponProducer-out-0:
          destination: coupon-topic
      rocketmq:
        binder:
          name-server: 127.0.0.1:9876
 	@Autowired
    private StreamBridge streamBridge;

在这里插入图片描述

消费者端:

server:
  port: 8085

spring:
  application:
    name: bengdou-coupon-service
  cloud:
    # 注册中心
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
    stream:
      # Binding配置项,对应 Map<String, BindingProperties> bindings
      bindings:
        couponConsumer-in-0:
          destination: coupon-topic
          group: coupon-comsumer-group
      rocketmq:
        binder:
          name-server: 127.0.0.1:9876

优惠券MQ listener

/**
 * 优惠券MQ listener
 *
 * @author Jiahai
 */
@Slf4j
@Component
public class MqListener {
    @Autowired
    private CouponService couponService;

    /**
     * MQ消费者
     *
     * @return Function<Flux < Message < Long>>
     */
    @Bean
    public Function<Flux<Message<Long>>, Mono<Void>> couponConsumer() {
        return flux -> flux.map(message -> {
            log.info(message.toString());

            // 用户ID
            Long userId = message.getPayload();
            // 发放新人注册优惠券
            couponService.addNewUserCoupon(userId);

            return message;
        }).then();
    }

总结

个人感觉 rocketmq-spring-boot-starter 使用起来方便些,也比较成熟,而 Spring Cloud Stream 3.x版本资料不多,如果要使用RocketMQ的事务消息等,还要再查询官方文档学习。

参考资料:
Spring Cloud Stream 介绍
Spring Cloud Stream 参考文档
Spring Cloud Stream 3.x 新特性
Spring Cloud Stream RocketMQ Binder

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Spring Cloud Stream是一个框架,可以轻松地构建消息驱动的微服务应用程序。它提供了一组统一的API,用于在不同的消息中间件之间发送和接收消息,其中包括RocketMQ。 以下是将Spring Boot集成Spring Cloud Stream RocketMQ的步骤: 1. 添加依赖 在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-stream-binder-rocketmq</artifactId> <version>3.1.0</version> </dependency> ``` 2. 配置RocketMQ连接信息 在application.properties文件中添加以下配置: ```properties spring.cloud.stream.bindings.<channelName>.destination=<topicName> spring.cloud.stream.bindings.<channelName>.binder=rocketmq spring.cloud.stream.rocketmq.binder.name-server=<nameServerAddress> spring.cloud.stream.rocketmq.binder.access-key=<accessKey> spring.cloud.stream.rocketmq.binder.secret-key=<secretKey> spring.cloud.stream.rocketmq.binder.group=<groupName> ``` 其中,`<channelName>`是通道名称,`<topicName>`是RocketMQ的主题名称,`<nameServerAddress>`是RocketMQ的NameServer地址,`<accessKey>`和`<secretKey>`是RocketMQ的访问密钥,`<groupName>`是RocketMQ的消费者组名称。 3. 创建消息生产者 使用`@EnableBinding`注解启用绑定,并使用`@Output`注解定义输出通道。例如: ```java @EnableBinding(Source.class) public class MyProducer { @Autowired private Source source; public void sendMessage(String message) { source.output().send(MessageBuilder.withPayload(message).build()); } } ``` 4. 创建消息消费者 使用`@EnableBinding`注解启用绑定,并使用`@Input`注解定义输入通道。例如: ```java @EnableBinding(Sink.class) public class MyConsumer { @StreamListener(Sink.INPUT) public void receiveMessage(String message) { System.out.println("Received message: " + message); } } ``` 5. 发送和接收消息 使用`MyProducer`发送消息,使用`MyConsumer`接收消息。 ```java @Autowired private MyProducer producer; @Autowired private MyConsumer consumer; public void sendMessage(String message) { producer.sendMessage(message); } public void receiveMessage() { consumer.receiveMessage(); } ``` 这就是将Spring Boot集成Spring Cloud Stream RocketMQ的过程,希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值