ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

rocketmq升级记录

2022-08-17 14:33:30  阅读:123  来源: 互联网

标签:4.7 记录 spring 4.9 升级 org import 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的实现,则客户端升级后就可以了。

 

标签:4.7,记录,spring,4.9,升级,org,import,rocketmq
来源: https://www.cnblogs.com/thinkingandworkinghard/p/16595041.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有