最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決rocketmq-client查詢手動發(fā)送消息異常問題

 更新時間:2023年08月29日 15:26:27   作者:小淼同學(xué)  
這篇文章主要介紹了解決rocketmq-client查詢手動發(fā)送消息異常問題,具有很好的參考價值,希望對大家大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

rocketmq-client查詢手動發(fā)送消息異常

今天處理rocketmq的后臺的一些問題

下面這個問題是你也用網(wǎng)上4.x的rocketmq版本的監(jiān)控后臺,才會出現(xiàn)的

MQClientException: CODE: 208 DESC: query message by id finished, but no message.

這個是我們用rocketmq-client手動發(fā)送消息的時候,再去查看消息詳情的時候遇到的問題,會報錯,消息找不到

這是由于查詢出來的mq消息,這些消息的msgId,不是真的msgId,而是UniqueKey

為什么會這樣呢,我們來看一段源碼

public static List<MessageExt> decodes(java.nio.ByteBuffer byteBuffer, final boolean readBody) {
        List<MessageExt> msgExts = new ArrayList<MessageExt>();
        while (byteBuffer.hasRemaining()) {
            MessageExt msgExt = clientDecode(byteBuffer, readBody);
            if (null != msgExt) {
                msgExts.add(msgExt);
            } else {
                break;
            }
        }
        return msgExts;
    }

1.以上是解析從broker獲取到的消息

  public static MessageExt clientDecode(java.nio.ByteBuffer byteBuffer, final boolean readBody) {
        return decode(byteBuffer, readBody, true, true);
    }

2.注意第四個參數(shù)是true

它代表是否是client端,就是監(jiān)控端

 public static MessageExt decode(
        java.nio.ByteBuffer byteBuffer, final boolean readBody, final boolean deCompressBody, final boolean isClient) {
        try {
            MessageExt msgExt;
            //1.重點(diǎn)看這里
            if (isClient) {
                msgExt = new MessageClientExt();
            } else {
                msgExt = new MessageExt();
            }
            //此處省略
            ...........
            ByteBuffer byteBufferMsgId = ByteBuffer.allocate(MSG_ID_LENGTH);
            String msgId = createMessageId(byteBufferMsgId, msgExt.getStoreHostBytes(), msgExt.getCommitLogOffset());
            msgExt.setMsgId(msgId);
            //2.重點(diǎn)看這里
            if (isClient) {
                ((MessageClientExt) msgExt).setOffsetMsgId(msgId);
            }
            return msgExt;
        } catch (Exception e) {
            byteBuffer.position(byteBuffer.limit());
        }
        return null;
    }

3.MessageClientExt主要是這個對象惹的禍

老的版本mq就是一個 MessageExt

我們再來看看這個對象為什么惹禍了

public class MessageClientExt extends MessageExt {
    public String getOffsetMsgId() {
        return super.getMsgId();
    }
    public void setOffsetMsgId(String offsetMsgId) {
        super.setMsgId(offsetMsgId);
    }
    /**
    * 沒錯就是這里,默認(rèn)拿的是屬性里的UNIQ_KEY
    **/
    @Override
    public String getMsgId() {
        String uniqID = MessageClientIDSetter.getUniqID(this);
        if (uniqID == null) {
            return this.getOffsetMsgId();
        } else {
            return uniqID;
        }
    }
    public void setMsgId(String msgId) {
        //DO NOTHING
        //MessageClientIDSetter.setUniqID(this);
    }
}

所以知道了問題,就好解決了

我是在顯示類里面做相應(yīng)的處理,貼下我的處理方式,我是在  MessageView.class里處理

 public static MessageView fromMessageExt(MessageExt messageExt) {
        MessageView messageView = new MessageView();
        BeanUtils.copyProperties(messageExt, messageView);
        if (messageExt.getBody() != null) {
            messageView.setMessageBody(new String(messageExt.getBody(), Charsets.UTF_8));
        }
        //主要是這里判斷下,是否是這個類,是就把原來的msgId拿出來
        if(messageExt instanceof MessageClientExt){
            MessageClientExt ext =   (MessageClientExt) messageExt;
            messageView.setMsgId(ext.getOffsetMsgId());
        }
        return messageView;
    }

總結(jié)

好了,這里就總結(jié)下這個問題

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決spring jpa中update的坑

    解決spring jpa中update的坑

    這篇文章主要介紹了spring jpa中update遇到的坑及解決方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Spring事務(wù)失效的問題及解決方案

    Spring事務(wù)失效的問題及解決方案

    本文詳細(xì)分析了Spring事務(wù)失效的原因,并提供了一個解決方案,在代碼中,事務(wù)傳播屬性設(shè)置為REQUIRES_NEW解決了事務(wù)失效的問題,確保了日志記錄的操作不會影響主事務(wù)的回滾,同時,文中還總結(jié)了各種事務(wù)傳播屬性的含義和使用場景
    2025-11-11
  • Mybatis中的mapper模糊查詢語句LIKE

    Mybatis中的mapper模糊查詢語句LIKE

    這篇文章主要介紹了Mybatis中的mapper模糊查詢語句LIKE,具有很好的參考價值,希望對大家有所幫助。
    2021-12-12
  • Java設(shè)計(jì)模式中的簡單工廠模式解析

    Java設(shè)計(jì)模式中的簡單工廠模式解析

    這篇文章主要介紹了Java設(shè)計(jì)模式中的簡單工廠模式解析,簡單工廠模式提供一個創(chuàng)建對象實(shí)例的功能,而無須關(guān)心其具體實(shí)現(xiàn),被創(chuàng)建實(shí)例的類型可以是接口、抽象類,也可以是具體的類,需要的朋友可以參考下
    2023-11-11
  • JPA?CriteriaBuilder子查詢方式

    JPA?CriteriaBuilder子查詢方式

    這篇文章主要介紹了JPA?CriteriaBuilder子查詢方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • dubbo將異常轉(zhuǎn)換成RuntimeException的原因分析?ExceptionFilter

    dubbo將異常轉(zhuǎn)換成RuntimeException的原因分析?ExceptionFilter

    這篇文章主要介紹了dubbo將異常轉(zhuǎn)換成RuntimeException的原因分析?ExceptionFilter問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Spring Boot 整合 RocketMQ 的全流程(消息發(fā)送、消費(fèi)、重試)

    Spring Boot 整合 RocketMQ 的全流程(消息發(fā)送、消費(fèi)、重試)

    本文詳細(xì)介紹了 Spring Boot 整合 RocketMQ 的全流程,包括環(huán)境搭建、依賴配置、消息發(fā)送(同步 / 異步 / 單向)、消息消費(fèi)(集群 / 廣播、并發(fā) / 順序)、消息重試與死信隊(duì)列處理,并提供了完整的代碼示例,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • Java中JFrame實(shí)現(xiàn)無邊框無標(biāo)題方法

    Java中JFrame實(shí)現(xiàn)無邊框無標(biāo)題方法

    這篇文章主要介紹了Java中JFrame實(shí)現(xiàn)無邊框無標(biāo)題方法,本文直接給出代碼實(shí)例,需要的朋友可以參考下
    2015-05-05
  • java?11新特性HttpClient主要組件及發(fā)送請求示例詳解

    java?11新特性HttpClient主要組件及發(fā)送請求示例詳解

    這篇文章主要為大家介紹了java?11新特性HttpClient主要組件及發(fā)送請求示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 深入淺析JDK8新特性之Lambda表達(dá)式

    深入淺析JDK8新特性之Lambda表達(dá)式

    Lambda表達(dá)式主要是替換了原有匿名內(nèi)部類的寫法,也就是簡化了匿名內(nèi)部類的寫法。這篇文章主要介紹了JDK8新特性之Lambda表達(dá)式,非常不錯感興趣的朋友參考下吧
    2016-10-10

最新評論

建宁县| 黄骅市| 汽车| 镇安县| 常州市| 连州市| 萨迦县| 济阳县| 施秉县| 清镇市| 晋中市| 错那县| 长宁县| 杭锦后旗| 贵州省| 郸城县| 乐昌市| 谷城县| 甘肃省| 临清市| 峡江县| 乌鲁木齐市| 灵川县| 新津县| 寿阳县| 台山市| 中卫市| 江门市| 汉中市| 青州市| 师宗县| 和田县| 岫岩| 揭西县| 文山县| 濮阳市| 洛阳市| 历史| 隆化县| 手游| 四会市|