国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

實際生產(chǎn)環(huán)境Apache RocketMQ消息體過大的解決方案

這篇具有很好參考價值的文章主要介紹了實際生產(chǎn)環(huán)境Apache RocketMQ消息體過大的解決方案。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

官方定義消息體默認大小為 4MB,普通順序消息類型。事務(wù)、定時、延時類消息默認大小為64KB。如果超過限制則會拋出異常!

但實際工作中,需要使用到MQ進行異步解耦,傳輸?shù)臉I(yè)務(wù)消息偶爾會遇到超過4MB,尤其在業(yè)務(wù)復(fù)雜的系統(tǒng)中,那么我們應(yīng)該如何處理呢?

在我工作實際應(yīng)用中,有以下幾種解決方案。

解決方案

方案一:消息壓縮

通常我們都是傳遞json消息數(shù)據(jù),然后底層使用字節(jié)流進行傳輸。如果此時json數(shù)據(jù)超過4MB,則可以考慮進行消息壓縮。

原理其實很好理解,比如我們經(jīng)常使用的壓縮包,可以把大文件進行壓縮,依次減小文件大小。

那么我們這里需要使用到的就是字符壓縮,把json字符串進行壓縮,然后進行傳輸,原理圖如下:
rocketmq消息大小限制,精選博文,Java核心技術(shù),java筆記分享,java-rocketmq,rocketmq,java,rabbitmq,kafka
經(jīng)過測試:我們原來5MB的數(shù)據(jù)可以壓縮到230KB,1MB都不到,當然效果和數(shù)據(jù)以及壓縮算法有關(guān)。如:大量重復(fù)字符則壓縮效率就更高。

壓縮解壓代碼如下:

@Slf4j
public class StringCompressUtils {

    /**
     * 使用gzip壓縮字符串
     *
     * @param str 要壓縮的字符串
     * @return 壓縮結(jié)果字符
     */
    public static String compress(String str) {
        if (str == null || str.length() == 0) {
            return str;
        }
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        GZIPOutputStream gzip = null;
        try {
            gzip = new GZIPOutputStream(out);
            gzip.write(str.getBytes());
        } catch (IOException e) {
            log.error("字符串壓縮異常!", e);
            e.printStackTrace();
        } finally {
            IoUtil.close(gzip);
        }
        return new sun.misc.BASE64Encoder().encode(out.toByteArray());
    }

    /**
     * 使用gzip解壓縮
     *
     * @param compressedStr 壓縮字符串
     * @return 解壓縮字符串
     */
    public static String uncompress(String compressedStr) {
        if (compressedStr == null) {
            return null;
        }

        byte[] compressed = null;
        String decompressed = null;
        GZIPInputStream ginzip = null;
        ByteArrayInputStream in = null;
        ByteArrayOutputStream out = new ByteArrayOutputStream();

        try {
            // 先解碼
            compressed = new sun.misc.BASE64Decoder().decodeBuffer(compressedStr);
            in = new ByteArrayInputStream(compressed);
            ginzip = new GZIPInputStream(in);
            byte[] buffer = new byte[1024];
            int offset = -1;

            while ((offset = ginzip.read(buffer)) != -1) {
                out.write(buffer, 0, offset);
            }

            decompressed = out.toString();
        } catch (IOException e) {
            log.error("字符串解壓縮異常!", e);
            e.printStackTrace();
        } finally {
            // 關(guān)流
            IoUtil.close(ginzip);
            IoUtil.close(in);
            IoUtil.close(out);
        }

        return decompressed;
    }

壓縮流程:原始字符 -> 壓縮 -> 壓縮字符 -> 編碼
解壓流程:壓縮字符 -> 解碼 -> 解壓 -> 原始字符

方案二:消息分割

方案一基本可以解決遇到的99%消息體過大的問題,如果不行則可以使用消息分割方案。

簡而言之,就是把一個大消息體,進行分割成多個小消息體進行傳輸。運用了化整為零的思想,至于實現(xiàn)方案,有很多,我簡單舉個例子。

  1. 一個大消息分割成多個小消息
  2. 多個小消息擁有相同的消息標識,如UUID
  3. 分割后小消息需要有一些元數(shù)據(jù)來標識自己,如 消息標識、一共分割了多少個、自己是第幾個。
  4. 傳輸后,消費者消費,然后根據(jù)元數(shù)據(jù)進行數(shù)據(jù)聚合還原。
  5. 將還原后的消息走正常消費流程即可

方案三:OSS存儲

方案一方案二幾乎已經(jīng)解決99.99%的場景了,如果還是不夠,那就要實施核打擊了。終極方案,OSS存儲!此方法絕對可以解決100%的場景!

大消息 -> 寫入到文件 -> 上傳到文件服務(wù)器 -> 拿到URL -> 傳輸 -> 消費

生產(chǎn)者:大消息,寫入文件,上傳文件,拿到訪問連接,發(fā)送訪問連接給MQ
消費者:消費,拿到訪問鏈接,讀取文件,拿到消息,執(zhí)行業(yè)務(wù)邏輯

快準狠!短平快!就是增加了中間件,其他一點毛病沒有,效率更高!文章來源地址http://www.zghlxwxcb.cn/news/detail-794907.html

到了這里,關(guān)于實際生產(chǎn)環(huán)境Apache RocketMQ消息體過大的解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 小程序內(nèi)容安全檢測圖片過大的解決方法

    目前微信官方對小程序的內(nèi)容安全審核越發(fā)嚴格,幾乎只要涉及到輸入框或者圖片選擇按鈕都需要接入內(nèi)容安全審核,不然都沒辦法通過審核。文本檢測很簡單,只要將文字直接提交到云端進行檢測就可以了,但是在接入圖片的時候總會有一些問題。 今天主要說一下圖片審核

    2024年02月03日
    瀏覽(20)
  • 關(guān)于uniapp開發(fā)h5,前端字體包過大的問題

    關(guān)于uniapp開發(fā)h5,前端字體包過大的問題

    ui給的字體包足足23.52M,還讓前端壓縮,讓人頭大…… 我在網(wǎng)上找了好久,這篇文章比較靠譜,但是講的并不仔細,文章鏈接: 第一步:下載安裝壓縮工具、沒有問題 npm install -g font-spider ttc2ttf @hayes0724/web-font-converter 第二步:字體文件轉(zhuǎn)換為ttf格式 # 源字體文件 otf 格式 ,注

    2024年01月21日
    瀏覽(26)
  • 小程序:uniapp解決主包體積過大的問題

    小程序:uniapp解決主包體積過大的問題

    已經(jīng)分包但還是體積過大 運行時勾選“運行時是否壓縮代碼”進行壓縮 在 manifest.json 配置(開啟分包優(yōu)化) 在 app.json 配置(設(shè)置組件按需注入)

    2024年02月07日
    瀏覽(31)
  • 關(guān)于VMware虛擬機創(chuàng)建時磁盤分配過大的解決方法

    關(guān)于VMware虛擬機創(chuàng)建時磁盤分配過大的解決方法

    ?寫這個文章是因為在虛擬機創(chuàng)建之時給的硬盤空間太大,想壓縮一下,到各大論壇搜索相關(guān)帖子,發(fā)現(xiàn)能解決問題的太少了,所幸最后成功壓縮。 接下來分享一下我壓縮虛擬機硬盤空間的經(jīng)驗 目錄 1.首先打開虛擬機右鍵“此電腦”→“管理”→“磁盤管理” ?2.找到我們要

    2024年02月05日
    瀏覽(61)
  • py腳本解決ArcGIS Server服務(wù)內(nèi)存過大的問題

    py腳本解決ArcGIS Server服務(wù)內(nèi)存過大的問題

    在一臺服務(wù)器上,使用ArcGIS Server發(fā)布地圖服務(wù),但是地圖服務(wù)較多,在發(fā)布之后,服務(wù)器的內(nèi)存持續(xù)處在95%上下的高位狀態(tài),導(dǎo)致服務(wù)器運行狀態(tài)不穩(wěn)定,經(jīng)常需要重新啟動。重新啟動后重新進入這種內(nèi)存高位的陷阱。 打開任務(wù)管理器發(fā)現(xiàn)大量 ArcSOC.exe 進程,這些進程CPU使

    2024年02月09日
    瀏覽(25)
  • 解決gitee倉庫中 .git 文件夾過大的問題

    解決gitee倉庫中 .git 文件夾過大的問題

    最近,許多項目都遷移到gitee。使用的也越來越頻繁,但是今天突然收到一個倉庫爆滿的提示。讓我一臉懵逼。本文將詳細為你解答,這種情況如何處理。 我收到的報錯如下: 看了下,大概意思是一個倉庫體積最大不能超過1GB,但是現(xiàn)在我已經(jīng)超過3GB了。。。 我第一個想法

    2024年02月03日
    瀏覽(94)
  • 深度解析Elasticsearch索引數(shù)據(jù)量過大的優(yōu)化與部署策略

    目錄 ??????? 引言 1. 分片和副本策略 1.1分片策略 1.1.1 數(shù)據(jù)量 1.1.2 查詢和寫入負載 1.1.3 硬件資源 1.1.4 高可用性 1.2.副本策略 1.2.1 冗余和可用性 1.2.2 查詢性能 1.2.3 存儲需求 2. 硬件和資源配置優(yōu)化 2.1?選擇高性能硬件 2.1.1 存儲 2.1.2 內(nèi)存 2.1.3 處理器 2.1.4 網(wǎng)絡(luò) 2.2. JVM調(diào)

    2024年01月19日
    瀏覽(26)
  • VMware 虛擬機占用磁盤空間過大的一種解決方案

    在使用VMware虛擬機的過程中,VM會自動擴大虛擬磁盤的占用空間。發(fā)現(xiàn)無論是VM自帶的碎片整理還是壓縮,這兩個操作都無法明顯減少虛擬機占用空間。 現(xiàn)在找到一種方法可以做到這點( 可能只適用于VM workstation pro,并未測試過普通版本 ),下面是方法的整理 1.正常關(guān)閉虛擬

    2024年02月13日
    瀏覽(24)
  • 微信小程序:uniapp解決上傳小程序體積過大的問題

    微信小程序:uniapp解決上傳小程序體積過大的問題

    在昨天的工作中遇到了一個微信小程序上傳代碼過大的情況,在這里總結(jié)一下具體的解決步驟,首先介紹一下,技術(shù)棧是使用uniapp框架+HBuilderX的開發(fā)環(huán)境。 錯誤提示 真機調(diào)試,提示包提交過大,不能正常生成二維碼,后續(xù)上傳代碼更是不可能了,減少包中的體積順著這條思

    2024年02月03日
    瀏覽(89)
  • 關(guān)于Tomcat服務(wù)器catalina.out文件過大的問題

    關(guān)于Tomcat服務(wù)器catalina.out文件過大的問題

    一、問題:當服務(wù)部署Tomcat后,運行時間久了,catalina.out文件就會越來越大,最終導(dǎo)致服務(wù)器磁盤空間不足,影響系統(tǒng)的穩(wěn)定性。 二、解決方案: 1、修改Tomcat的日志配置,配置日志的級別: (1)、Tomcat日志分類: catalina:標準輸出和標準出錯,所有輸出到這兩個位置的都

    2024年02月05日
    瀏覽(91)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包