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

posted @ 2020-06-15 17:13  atliwen  阅读(665)  评论(0编辑  收藏  举报