zoukankan      html  css  js  c++  java
  • SpringBoot1.5.* RockerMQ集成插件

    Spring RockerMQ 各个集成版本情况与为什么自己集成

    Spring Cloud 官方方案 Spring Cloud Stream RocketMQ

    最优选择

    优点:

    • 方案为Spring Cloud 官方 方案
    • 是对所有MQ的一个更高的抽象,屏蔽了不同MQ的差异。
    • 不用改代码就可以切换MQ环境

    缺点:

    • 改变了现有使用方式,需要重新适应
    • 需要重新进行培训。

    放弃原因:

    • 公司现有服务是基于 spirng boot  1.5.*  对应的 spring cloud 也是老版本。
    • 使用阿里提供的1.2版本,对应的是spring boot 1.5.*  也是老版本,可能是最早版本。
    • 阿里并未提供生产者的实现方式,实现方式直接为空!

     Spring Boot官方方案 Spring Boot RocketMQ

    阿帕奇官方适配Spring boot 方案

    优点:

    • 官方提供是boot化方案
    • 注解形式开发
    • 使用简单

    缺点

    • 注解化可以使用多个队列,容易出错。
    • 生产消息不会返回生成消息的ID等信息,只有是否成功。

    放弃原因:

    • 不支持 spring boot  1.5.* ,最低为 2.0.* 版本。
    • 具体原因为 spirng boot 1.5.*  的spring 版本为 4.*  spring boot 2.0.* 为 spring 5.0 、 spring boot 2.1.* 为spirng 5.1
    • 需要修改源码,问题原因在 通过注解动态创建一个生产者的时候, 低版本的 spring  没有对应初始化类方法。
    • 代码研究完了,并不复杂。但是综合各自情况,还是不适合我们。

    RocketMQ原生装饰方案(当前方案)

    • 基于原生进行装饰。
    • 生产者,直接注入生产者对象就可使用。
    • 消费者,实现消费接口方案,自动调用。
    • 基本不改变现有开发习惯。

    开源地址:

    spirng boot 插件模式

     添加依赖:

    当前版本为 0.1.0 ,请检查是否有最新版本。

            <dependency>
                <groupId>org.apache.rocketmq</groupId>
                <artifactId>rocketmq-client</artifactId>
                <version>4.4.0</version>
            </dependency>
            <dependency>
                <groupId>com.zjs.mic</groupId>
                <artifactId>zjs-spring-boot-mq</artifactId>
                <version>最新版本</version>
            </dependency>

     使用示例:

            @Component
            public class MessageListener implements MessageListenerConsumerInterface
            {
       
                @Autowired
                private MqProducer mqProducer;
       
                /**
                 * 生成者使用示例
                 */
                public void sendMQ()
                {
                    try {
                        mqProducer.send("","","");
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
                }
       
                /**
                 * 消费者使用示例
                 */
                @Override
                public ConsumeConcurrentlyStatus consumeMessage(String strBody, MessageExt msg, ConsumeConcurrentlyContext context) {
                    System.out.println(strBody);
                    return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
                }
            }

    配置:

    rocketmq:
      # Name Server 地址列表
      namesrvAddr: 10.10.0.01:9876;10.10.0.02:9876
      # Producer 组名, 多个 Producer 如果属于一 个应用,发送同样的消息,则应该将它们 归为同一组
      producerGroupName: testliwen
      # 生产者名称
      instanceName: testliwen
      # 超时时间 默认 20000
      sendMsgTimeout: 20000
      # 消费端组名
      consumerGroup: atliwenconsumer
      # 消息处理次数 默认12  只是服务自己判断,非 rocketmq 自身   -1 为不生效
      # 没有实现 MqExceedCountInterface 接口的 bean 也不会触发。
      count: 12
      # 消费端 Topic
      Topics:
        - {Topic: 'testAAA', Tags: '*'}

    GitHub地址:https://github.com/atliwen/atliwen-spring-boot-mq

  • 相关阅读:
    基于Asp.Net webApi owin oauth2的实现
    动态赋值
    C#生成二维码
    深度学习中反卷积层(转置卷积)引起的棋盘格噪声
    batch normalization 批归一化 --- 一个硬币的两面
    FFMPEG常用命令-格式转换-持续更新中
    [译]CRF和QP的区别
    读懂NCHW和NHWC
    [译]GPUView
    有一次接口设计
  • 原文地址:https://www.cnblogs.com/atliwen/p/13132062.html
Copyright © 2011-2022 走看看