SpringCloud集成RocketMQ

这篇具有很好参考价值的文章主要介绍了SpringCloud集成RocketMQ。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SpringCloud集成RocketMQ

  1. pom

    <!--boot web-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <!--spring-cloud-starter-stream-rocketmq 2.2.5.RELEASE-->
    <!--根据自己部署的mq版本来选择对应的客户端版本-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-stream-rocketmq</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.apache.rocketmq</groupId>
                <artifactId>rocketmq-client</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.apache.rocketmq</groupId>
                <artifactId>rocketmq-acl</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
    <dependency>
        <groupId>org.apache.rocketmq</groupId>
        <artifactId>rocketmq-client</artifactId>
        <version>4.8.0</version>
    </dependency>
    
    <dependency>
        <groupId>org.apache.rocketmq</groupId>
        <artifactId>rocketmq-acl</artifactId>
        <version>4.8.0</version>
    </dependency>
    
    <!-- actuator 不引入会报错哦-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    

生产者

  1. 生产者yaml

    spring:
      cloud:
    	stream:
    	  #RocketMQ 通用配置
          rocketmq:
            binder:
               #客户端接入点,必填  rocketMQ的连接地址,binder高度抽象
              name-server: localhost:9876
          bindings:
          # bindings 具体生产消息、消费消息的桥梁
          # destination: 指定发送的topic
          # content-type: #默认是application/json
          # group: 组
          # gis_group_out: @Output @Input绑定  @Output绑定就是生产者  @Input绑就是消费者
          # consumer:concurrency: 设置消费线程数
            gis_group_out:
              destination: godown_gis
              content-type: application/plain
              group: gis_group_out
              #consumer:
              #  concurrency: 20
    
  2. 自定义Source

    package com.dist.ytgz.approve.rocketmq;
    
    import org.springframework.cloud.stream.annotation.Output;
    import org.springframework.messaging.MessageChannel;
    
    /**
     * 自定义Source
     *
     * @author <a href="mailto:zhangxiao@dist.com.cn">Zhang Xiao</a>
     * @since
     */
    public interface MySource {
    
        String GIS_GROUP_OUT = "gis_group_out";
    
    
        @Output(MySource.GIS_GROUP_OUT)
        MessageChannel gisGroupOut();
    
    }
    
  3. 发送消息

    // spring cloud stream里面发消息通过 Source 发送
    @Autowired
    private MySource source;
    
    // 发送消息的方法 withPayload(T payload) 所以是传任意类型, 把对应的CONTENT_TYPE, APPLICATION_JSON设置好就行
    source.gisGroupOut().send(
                    MessageBuilder
                            .withPayload(messagePayload)
                            .setHeader(MessageHeaders.CONTENT_TYPE, MimeTypeUtils.APPLICATION_JSON).build()
            );
    
  4. 启动类

    /**
     * 记得添加@EnableBinding注解指定消息信道
     * Sink.class 表示信道 input , Source.class 表示信道 output
     * 这两个分别与application.yml中的spring.cloud.stream.bindings.input和spring.cloud.stream.bindings.output对应
     * 如果信道名称换成是sender和receiver,就得配置spring.cloud.stream.bindings.sender和spring.cloud.stream.bindings.receiver
     *
     *
     * 而我这里是gis_group_out 所以 spring.cloud.stream.bindings.gis_group_out
     */
    // @EnableBinding(value = {Sink.class, Source.class})
    @EnableBinding(value = Source.class)
    @SpringBootApplication
    public class ApproveApplication {
        public static void main(String[] args) {
            SpringApplication.run(ApproveApplication.class, args);
        }
    }
    

消费者

  1. 消费者yaml

    spring:
      cloud:
    	stream:
    	  #RocketMQ 通用配置
          rocketmq:
            binder:
               #客户端接入点,必填  rocketMQ的连接地址,binder高度抽象
              name-server: localhost:9876
            bindings:
              gis_group_in:
                consumer: # 消息失败直接放入死信队列, 消息不会被重复消费
                  delayLevelWhenNextConsume: -1
          bindings:
            # bindings 具体生产消息、消费消息的桥梁
            # destination: 指定发送的topic
            # content-type: #默认是application/json
            # group: 组
            # gis_group_out: @Output @Input绑定  @Output绑定就是生产者  @Input绑就是消费者
            # consumer.maxAttempts: 1 #默认是3,1表示不重试
            gis_group_in:
              destination: godown_gis
              content-type: application/plain
              group: gis_group_in
              consumer:
                concurrency: 20
                maxAttempts: 1
    
  2. 自定义Sink

    package com.dist.ic.rocketmq;
    
    import org.springframework.cloud.stream.annotation.Input;
    import org.springframework.messaging.SubscribableChannel;
    
    /**
     * 自定义Sink
     *
     * @author <a href="mailto:zhangxiao@dist.com.cn">Zhang Xiao</a>
     * @since
     */
    public interface MySink {
    
        String GIS_GROUP_IN = "gis_group_in";
    
        @Input(MySink.GIS_GROUP_IN)
        SubscribableChannel gis_group_in();
    
    }
    
  3. 接受消息

    package com.dist.ic.rocketmq;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONArray;
    import com.dist.common.security.vo.UserVO;
    import com.dist.ic.service.ICService;
    import org.apache.commons.collections.MapUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.cloud.stream.annotation.StreamListener;
    import org.springframework.stereotype.Component;
    
    import java.util.Map;
    
    
    /**
     * TODO
     *
     * @author <a href="mailto:zhangxiao@dist.com.cn">Zhang Xiao</a>
     * @since
     */
    @Component
    public class RocketMessageListener {
    
        private final Logger log = LoggerFactory.getLogger(RocketMessageListener.class);
    
        @Autowired
        private ICService icService;
    
        @StreamListener(MySink.GIS_GROUP_IN)  // 指定对应的Input管道
        public void handlerMessage(MessagePayload message) {
            log.info("接收到rocketmq的消息========>{}", JSON.toJSONString(message));
        }
    
    }
    
  4. 启动类

    /**
     * 记得添加@EnableBinding注解指定消息信道
     * Sink.class 表示信道 input , Source.class 表示信道 output
     * 这两个分别与application.yml中的spring.cloud.stream.bindings.input和spring.cloud.stream.bindings.output对应
     * 如果信道名称换成是sender和receiver,就得配置spring.cloud.stream.bindings.sender和spring.cloud.stream.bindings.receiver
     *
     *
     * 而我这里是gis_group_out 所以 spring.cloud.stream.bindings.gis_group_out
     */
    // @EnableBinding(value = {Sink.class, Source.class})
    @EnableBinding(value = Sink.class)
    @SpringBootApplication
    public class ICApplication {
        public static void main(String[] args) {
            SpringApplication.run(ICApplication.class, args);
        }
    }
    

    重点: RocketMQ相关配置看https://github.com/spring-cloud/spring-cloud-stream-binder-rabbit文章来源地址https://www.toymoban.com/news/detail-499133.html

到了这里,关于SpringCloud集成RocketMQ的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 动力节点RocketMQ笔记第三章RocketMQ集成SpringBoot

    22.1.1 创建项目,完整的pom.xml 22.1.2 修改配置文件application.yml 22.1.3 我们在测试类里面测试发送消息 往powernode主题里面发送一个简单的字符串消息 运行后查看控制台 22.1.4 查看rocketMq的控制台 查看消息细节

    2024年02月04日
    浏览(46)
  • RocketMQ视频笔记第三章RocketMQ集成SpringBoot(动力节点)

    本篇文章是RocketMQ视频笔记的第三章,重点介绍了如何将RocketMQ集成到Spring Boot框架中。通过学习该文章,读者能够掌握如何使用RocketMQ和Spring Boot进行消息传递和处理。

    2024年02月05日
    浏览(135)
  • SpringBoot 集成 RocketMQ

    🎈 作者: Linux猿 🎈 简介: CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! 🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬 目录 一、安装 RocketMQ 和 RocketMQ Dashboard 二、编写代码运行     本篇文章主要记

    2024年02月09日
    浏览(36)
  • Springboot 集成 RocketMq(入门)

    Linux 安装 RocketMq-CSDN博客 Springboot 集成 RocketMQ(进阶-消息)-CSDN博客

    2024年02月05日
    浏览(38)
  • Apache RocketMQ之集成RocketMQ_MQTT 安装部署协议

    Apache RocketMQ 安装说明 安装步骤 参考快速开始 https://rocketmq.apache.org/zh/docs/quickStart/01quickstart 安装可视化rocketmq_dashboard下载地址 https://rocketmq.apache.org/zh/docs/4.x/deployment/03Dashboard/ 安装rocketmq_mqtt https://rocketmq.apache.org/zh/docs/4.x/mqtt/01RocketMQMQTTOverview broker.conf配置文件中添加参数,开

    2024年02月13日
    浏览(33)
  • spring boot 集成rocketmq

    在现代的微服务架构中,消息队列已经成为一种常见的异步处理模式,它能解决服务间的同步调用、耦合度高、流量高峰等问题。RocketMQ是阿里巴巴开源的一款消息中间件,性能优秀,功能齐全,被广泛应用在各种业务场景。 本文将详细介绍如何在Spring Boot项目中集成RocketM

    2024年02月14日
    浏览(52)
  • SpringBoot3集成RocketMq

    标签:RocketMq5.Dashboard; RocketMQ因其架构简单、业务功能丰富、具备极强可扩展性等特点被广泛应用,比如金融业务、互联网、大数据、物联网等领域的业务场景; 在 rocketmq-starter 组件中,实际上依赖的是 rocketmq-client 组件的 5.0 版本,由于两个新版框架间的兼容问题,需要添

    2024年02月12日
    浏览(50)
  • SpringBoot集成Apache RocketMQ详解

    上个章节我们学习了RocketMQ的学习环境安装,讲了两种安装方式 1. docker使用官方镜像安装,2.使用源码方式安装。安装教程如下 如果已经安装了RocketMQ 学习环境可以略过此章节 《【实践篇(一)】RocketMQ入门之学习环境搭建》 本章节,我们学习Spring Boot 集成Apache RocketMQ。并验证

    2024年02月07日
    浏览(37)
  • RocketMQ集成Springboot --Chapter1

    RocketMQ集成Springboot 三种消息发送方式 生产者 引入依赖 消费者 引入依赖 实现一个监听器对象,重写其中的消费消息的方法。使用注解@RocketMQMessageListener(consumerGroup = “htpConsumerGroup”,topic = “helloTopicBoot”) consumerGroup组必须是唯一的,helloTopicBoot表示要监听的主题 最后生产者

    2024年02月16日
    浏览(47)
  • RocketMQ集成Springboot --Chapter5

    生产者,由于springboot没有专门对mq进行tag标记的方法,只是在topic:后面加上,所以只需 rocketMQTemplate.sendOneWay(“tagFilterBoot:TagA”,msg1);标记即可 生产者代码如下 消费者在注解处添加selectorExpression = \\\"TagA || TagC\\\"表达式选项即可。 消费者代码如下 生产者 setHeader就是设置属性 生产

    2024年02月16日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包