• rocketmq升级记录


           由于服务器rocketmq的版本是4.7.1,里面的fastjson是1.2.67.被安全部门告知需要升级到1.2.80以上的。于是开始rocketmq的升级之路。

           看了下最新版本是 https://github.com/apache/rocketmq ,是4.9.4.处于使用考虑,使用的是4.9.2.(4.9.2 fastjson y) 于是先让运维的同事在自己的云服务器安装了下,本地修改nacos的配置。把本地的mq地址改成他安装好的云服务器集群ip,然后本地写好发送mq的例子,进行测试。

         

        @Resource
        private DelaySyncProduct delaySyncProduct;
    
        @Override
        public Result<PublishCommentVO> putCommentTest(PublishCommentDTO commentDTO) throws Exception {
            try {
                // MQ审核发布信息
                StringBuilder sb = new StringBuilder(messageTopic);
                sb.append(":").append(CommunityTypeTag.BBS_TYPE_COMMENT.getCode());
                // 推消息
                delaySyncProduct.sendDealyMessage(sb.toString(),JSONObject.toJSONString(commentDTO),5);
            } catch (MessagingException e) {
                LOG.error("异常",e);
            }
    
            return Result.ok();
        }
    package com.gwm.marketing.common.util;
    
    import lombok.extern.slf4j.Slf4j;
    import org.apache.rocketmq.client.producer.SendResult;
    import org.apache.rocketmq.spring.core.RocketMQTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.messaging.support.MessageBuilder;
    import org.springframework.stereotype.Component;
    
    import java.time.LocalDateTime;
    import java.time.format.DateTimeFormatter;
    
    /**
     * @author fanht
     * @descrpiton  延迟队列,使用rockemq的延迟队列
     * @date 2022/6/22 09:47:41
     * @versio 1.0
     */
    @Component
    @Slf4j
    public class DelaySyncProduct {
    
        @Autowired
        private RocketMQTemplate mqTemplate;
    
        /**
         * rocketMq延迟队列分为18个等级  每个等级对应的延迟时间如下
         */
        private String messageDelayLevel = "1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h";
    
    
        public void sendDealyMessage(String topic,String message,int delayLevel){
            SendResult sendResult = mqTemplate.syncSend(topic, MessageBuilder.withPayload(message).build(),20000,delayLevel);
            log.info("sendtime is {}", DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss").format(LocalDateTime.now()));
            log.info("sendResult is {}",sendResult);
        }
    }

       测试流程如下:先使用4.7.1的版本进行mq的发消息以及消费消息;没有问题; 然后运维把4.7.1的配置信息拷贝到4.9.2上面,将4.7.1的broker的写权限关闭,4.9.2的broker开启。4.7.1的nameServer关闭,4.9.2的nameServer开启。

        然后就出问题了: 切换到4.9.2之后,之前发到4.7.1的 消息无法消费。 但是4.9.2的发消息以及消费,又都是正常的。

        想了下我们这边客户端也是4.7.1的,是不是客户端的问题呢?于是把客户端4.7.1的 pom依赖修改为了4.9.2

       

     <dependency>
                <groupId>org.apache.rocketmq</groupId>
                <artifactId>rocketmq-client</artifactId>
                <version>4.9.2</version>
            </dependency>

           继续测试,发现升级客户端后还是不行。

         想到我们发mq 用的是 rocketmq-spring,里面的版本也是4.7.1.是不是这个的问题。https://github.com/apache/rocketmq-spring。 因为前几天一直在看rocketmq-spring的源码相关,知道rocketmq-spring的客户端要和服务端保持一直。而且我们这个rocketmq-spring也是1年前的版本了。想到这里,决定再试下。

        然后发现rocketmq-spring 的依赖包是随着rocketmq-spring-boot-starter的。于是升级 rocketmq-sprign-boot-starter

       

                <!-- rocketmq -->
                <dependency>
                    <groupId>org.apache.rocketmq</groupId>
                    <artifactId>rocketmq-spring-boot-starter</artifactId>
                    <version>2.2.2</version>
                </dependency>

        为何是2.2.2,因为rocketmq-spring的每个版本都对应不同的rocketmq的版本的。

    2.2.1只能对应4.9.1. 

     升级后继续测试,使用延迟队列。先把消息发到4.7.1上面,然后让运维关闭4.7.1的写权限,打开4.9.2来进行消费。  

      总算可以了!

        总结下来就是:低版本rockemq升级到高版本的mq,除了服务端要升级,客户端rocketmq-client 也要升级。如果是用的中间件,则中间件也要对应的升级。如果是自己公司写的mq的实现,则客户端升级后就可以了。

  • 相关阅读:
    南阳118--修路方案(次小生成树)
    Poj3026--Borg Maze(Bfs+Prime)
    sql常识- UNIQUE
    sql常识-FULL JOIN
    sql常识-RIGHT JOIN
    sql常识-LEFT JOIN
    sql常识-INNER JOIN
    sql常识-Join
    sql常识-Alias
    sql常识-BETWEEN 操作符
  • 原文地址:https://www.cnblogs.com/thinkingandworkinghard/p/16595041.html
Copyright © 2020-2023  润新知