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

RabbitMQ系列(8)--實(shí)現(xiàn)RabbitMQ隊(duì)列持久化及消息持久化

這篇具有很好參考價(jià)值的文章主要介紹了RabbitMQ系列(8)--實(shí)現(xiàn)RabbitMQ隊(duì)列持久化及消息持久化。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

概念:在上一章文章中我們演示了消費(fèi)者宕機(jī)的情況下消息沒(méi)有被消費(fèi)成功后會(huì)重新入隊(duì),然后再被消費(fèi),但如何保障RabbitMQ服務(wù)停掉的情況下,生產(chǎn)者發(fā)過(guò)來(lái)的消息不會(huì)丟失,這時(shí)候我們?yōu)榱讼⒉粫?huì)丟失就需要將隊(duì)列和消息都標(biāo)記為持久化。

1、實(shí)現(xiàn)RabbitMQ隊(duì)列持久化

只需要把queueDeclare方法的第二個(gè)參數(shù)改為true即可對(duì)Queue進(jìn)行持久化

package com.ken;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

/**
 * 生產(chǎn)者
 */
public class Producer {

    //隊(duì)列名稱(用于指定往哪個(gè)隊(duì)列發(fā)送消息)
    public static final String QUEUE_NAME = "durable_queue";

    //進(jìn)行發(fā)送操作
    public static void main(String[] args) throws Exception{

        //創(chuàng)建一個(gè)連接工廠
        ConnectionFactory factory = new ConnectionFactory();
        //設(shè)置工廠IP,用于連接RabbitMQ的隊(duì)列
        factory.setHost("192.168.194.150");
        //設(shè)置連接RabbitMQ的用戶名
        factory.setUsername("admin");
        //設(shè)置連接RabbitMQ的密碼
        factory.setPassword("123456");
        //創(chuàng)建連接
        Connection connection = factory.newConnection();
        //獲取信道
        Channel channel = connection.createChannel();
        /**
         * 創(chuàng)建隊(duì)列(持久化隊(duì)列)
         * 第一個(gè)參數(shù):隊(duì)列名稱
         * 第二個(gè)參數(shù):服務(wù)器重啟后隊(duì)列是否還存在,即隊(duì)列是否持久化,true為是,false為否,默認(rèn)false,即消息存儲(chǔ)在內(nèi)存中而不是硬盤中
         * 第三個(gè)參數(shù):該隊(duì)列是否只供一個(gè)消費(fèi)者進(jìn)行消費(fèi),是否進(jìn)行消息共享,true為只允許一個(gè)消費(fèi)者進(jìn)行消費(fèi),false為允許多個(gè)消費(fèi)者對(duì)隊(duì)列進(jìn)行消費(fèi),默認(rèn)false
         * 第四個(gè)參數(shù):是否自動(dòng)刪除,最后一個(gè)消費(fèi)者斷開(kāi)連接后該隊(duì)列是否自動(dòng)刪除,true自動(dòng)刪除,false不自動(dòng)刪除
         * 第五個(gè)參數(shù):其他參數(shù)
         */
        channel.queueDeclare(QUEUE_NAME,true,false,false,null);
        //發(fā)消息
        String message = "Hello World";
        /**
         * 用信道對(duì)消息進(jìn)行發(fā)布
         * 第一個(gè)參數(shù):發(fā)送到哪個(gè)交換機(jī)
         * 第二個(gè)參數(shù):路由的Key值是哪個(gè),本次是隊(duì)列名
         * 第三個(gè)參數(shù):其他參數(shù)信息
         * 第四個(gè)參數(shù):發(fā)送消息的消息體
         */
        channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
        System.out.println("消息發(fā)送成功!");
    }

}

效果圖:

只要Features這個(gè)屬性的值為D,則證明隊(duì)列持久化成功

rabbitmq開(kāi)啟持久化,rabbitmq,java-rabbitmq,rabbitmq,Powered by 金山文檔

2、實(shí)現(xiàn)RabbitMQ消息持久化

只需要往basicPublish方法的第三個(gè)參數(shù)傳MessageProperties.PERSISTENT_TEXT_PLAIN,即可對(duì)消息進(jìn)行持久化這個(gè)參數(shù)能告訴RabbitMQ將消息保存到磁盤里進(jìn)行持久化處理,但值得注意的是將消息標(biāo)記為持久化不能完全保證消息不會(huì)丟失,因?yàn)榇嬖谙倻?zhǔn)備存儲(chǔ)到磁盤里,但未完全存儲(chǔ)完的時(shí)間間隔,這時(shí)候如果宕機(jī)了就不能保證消息真正的寫入磁盤重從而實(shí)現(xiàn)持久化,但對(duì)于簡(jiǎn)單任務(wù)隊(duì)列而言,這種持久化策略已經(jīng)夠用了

package com.ken;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.MessageProperties;

/**
 * 生產(chǎn)者
 */
public class Producer {

    //隊(duì)列名稱(用于指定往哪個(gè)隊(duì)列發(fā)送消息)
    public static final String QUEUE_NAME = "durable_queue";

    //進(jìn)行發(fā)送操作
    public static void main(String[] args) throws Exception{

        //創(chuàng)建一個(gè)連接工廠
        ConnectionFactory factory = new ConnectionFactory();
        //設(shè)置工廠IP,用于連接RabbitMQ的隊(duì)列
        factory.setHost("192.168.194.150");
        //設(shè)置連接RabbitMQ的用戶名
        factory.setUsername("admin");
        //設(shè)置連接RabbitMQ的密碼
        factory.setPassword("123456");
        //創(chuàng)建連接
        Connection connection = factory.newConnection();
        //獲取信道
        Channel channel = connection.createChannel();
        /**
         * 創(chuàng)建隊(duì)列
         * 第一個(gè)參數(shù):隊(duì)列名稱
         * 第二個(gè)參數(shù):服務(wù)器重啟后隊(duì)列是否還存在,即隊(duì)列是否持久化,true為是,false為否,默認(rèn)false,即消息存儲(chǔ)在內(nèi)存中而不是硬盤中
         * 第三個(gè)參數(shù):該隊(duì)列是否只供一個(gè)消費(fèi)者進(jìn)行消費(fèi),是否進(jìn)行消息共享,true為只允許一個(gè)消費(fèi)者進(jìn)行消費(fèi),false為允許多個(gè)消費(fèi)者對(duì)隊(duì)列進(jìn)行消費(fèi),默認(rèn)false
         * 第四個(gè)參數(shù):是否自動(dòng)刪除,最后一個(gè)消費(fèi)者斷開(kāi)連接后該隊(duì)列是否自動(dòng)刪除,true自動(dòng)刪除,false不自動(dòng)刪除
         * 第五個(gè)參數(shù):其他參數(shù)
         */
        channel.queueDeclare(QUEUE_NAME,false ,false,false,null);
        //發(fā)消息
        String message = "Hello World";
        /**
         * 用信道對(duì)消息進(jìn)行發(fā)布(消息持久化,把消息保存到磁盤里,不設(shè)置則保存到內(nèi)存里,容易丟失)
         * 第一個(gè)參數(shù):發(fā)送到哪個(gè)交換機(jī)
         * 第二個(gè)參數(shù):路由的Key值是哪個(gè),本次是隊(duì)列名
         * 第三個(gè)參數(shù):其他參數(shù)信息
         * 第四個(gè)參數(shù):發(fā)送消息的消息體
         */
        channel.basicPublish("",QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN,message.getBytes());
        System.out.println("消息發(fā)送成功!");
    }

}

其他:

1、出現(xiàn)報(bào)錯(cuò)信息:

Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - inequivalent arg 'durable' for queue 'durable_queue' in vhost '/': received 'true' but current is 'false', class-id=50, method-id=10)
rabbitmq開(kāi)啟持久化,rabbitmq,java-rabbitmq,rabbitmq,Powered by 金山文檔

原因:

當(dāng)前隊(duì)列是未持久化的,需要?jiǎng)h除隊(duì)列然后改成持久化才能重新生效

刪除隊(duì)列:

(1)點(diǎn)擊要?jiǎng)h除的隊(duì)列

rabbitmq開(kāi)啟持久化,rabbitmq,java-rabbitmq,rabbitmq,Powered by 金山文檔

(2)找到Delete Queue的按鈕

rabbitmq開(kāi)啟持久化,rabbitmq,java-rabbitmq,rabbitmq,Powered by 金山文檔

(3)點(diǎn)擊確認(rèn)刪除文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-707533.html

rabbitmq開(kāi)啟持久化,rabbitmq,java-rabbitmq,rabbitmq,Powered by 金山文檔

到了這里,關(guān)于RabbitMQ系列(8)--實(shí)現(xiàn)RabbitMQ隊(duì)列持久化及消息持久化的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 根據(jù)源碼,模擬實(shí)現(xiàn) RabbitMQ - 實(shí)現(xiàn)消息持久化,統(tǒng)一硬盤操作(3)

    根據(jù)源碼,模擬實(shí)現(xiàn) RabbitMQ - 實(shí)現(xiàn)消息持久化,統(tǒng)一硬盤操作(3)

    目錄 一、實(shí)現(xiàn)消息持久化 1.1、消息的存儲(chǔ)設(shè)定 1.1.1、存儲(chǔ)方式 1.1.2、存儲(chǔ)格式約定 1.1.3、queue_data.txt 文件內(nèi)容 ?1.1.4、queue_stat.txt 文件內(nèi)容 1.2、實(shí)現(xiàn) MessageFileManager 類 1.2.1、設(shè)計(jì)目錄結(jié)構(gòu)和文件格式 1.2.2、實(shí)現(xiàn)消息的寫入 1.2.3、實(shí)現(xiàn)消息的刪除(隨機(jī)訪問(wèn)文件) 1.2.4、獲取隊(duì)

    2024年02月12日
    瀏覽(22)
  • 項(xiàng)目實(shí)戰(zhàn) — 消息隊(duì)列(4){消息持久化}

    項(xiàng)目實(shí)戰(zhàn) — 消息隊(duì)列(4){消息持久化}

    目錄 ?一、消息存儲(chǔ)格式設(shè)計(jì) ? ? ? ??? 1、queue_data.txt:保存消息的內(nèi)容 ? ? ? ? ?? 2、queue_stat.txt:保存消息的統(tǒng)計(jì)信息 二、消息序列化 三、自定義異常類 四、創(chuàng)建MessageFileManger類 ?? 1、約定消息文件所在的目錄和文件名字 ??? 2、隊(duì)列的統(tǒng)計(jì)信息 ?? 3、創(chuàng)建隊(duì)列對(duì)應(yīng)

    2024年02月14日
    瀏覽(21)
  • RabbitMQ隊(duì)列持久化的重要性與意義

    持久化隊(duì)列的一個(gè)主要目的是確保數(shù)據(jù)的安全性。在RabbitMQ中,消息通常存儲(chǔ)在內(nèi)存中,以提高消息傳遞的速度。然而,如果隊(duì)列沒(méi)有持久化,一旦RabbitMQ服務(wù)器發(fā)生故障或者重啟,所有未被處理的消息都會(huì)丟失。這可能導(dǎo)致數(shù)據(jù)丟失,對(duì)于關(guān)鍵業(yè)務(wù)應(yīng)用程序來(lái)說(shuō)是不可接受的

    2024年02月07日
    瀏覽(21)
  • 【RabbitMQ 實(shí)戰(zhàn)】10 消息持久化和存儲(chǔ)原理

    【RabbitMQ 實(shí)戰(zhàn)】10 消息持久化和存儲(chǔ)原理

    rabbitmq的持久化分為三個(gè)部分: 交換器的持久化。 隊(duì)列的持久化。 消息的持久化。 1.1.1 交換器持久化 交換器的持久化是通過(guò)在聲明交換器時(shí), 指定Durability參數(shù)為durable實(shí)現(xiàn)的。 若交換器不設(shè)置持久化,在rabbitmq服務(wù)重啟之后,相關(guān)的交換器元數(shù)據(jù)會(huì)丟失,但消息不會(huì)丟失,

    2024年02月07日
    瀏覽(21)
  • RabbitMQ (HelloWord 消息應(yīng)答 持久化 不公平分發(fā) 預(yù)取值)

    RabbitMQ (HelloWord 消息應(yīng)答 持久化 不公平分發(fā) 預(yù)取值)

    在下圖中,“P”是我們的生產(chǎn)者,“C”是我們的消費(fèi)者。中間的框是一個(gè)隊(duì)列-RabbitMO.代表使用者保留的消息緩沖區(qū) 第一步:導(dǎo)入依賴 第二步:創(chuàng)建生產(chǎn)者 第三步:創(chuàng)建消費(fèi)者 因?yàn)槟銥榱舜_保同一條消息被其中一個(gè)工作線程接收到了之后,其它工作就不能消費(fèi)的到了 三者

    2023年04月14日
    瀏覽(24)
  • 【RabbitMQ】RabbitMQ 消息的可靠性 —— 生產(chǎn)者和消費(fèi)者消息的確認(rèn),消息的持久化以及消費(fèi)失敗的重試機(jī)制

    【RabbitMQ】RabbitMQ 消息的可靠性 —— 生產(chǎn)者和消費(fèi)者消息的確認(rèn),消息的持久化以及消費(fèi)失敗的重試機(jī)制

    在現(xiàn)代分布式應(yīng)用程序中,消息隊(duì)列扮演了至關(guān)重要的角色,允許系統(tǒng)中的各個(gè)組件之間進(jìn)行異步通信。這種通信模式提供了高度的靈活性和可伸縮性,但也引入了一系列的挑戰(zhàn),其中最重要的之一是消息的可靠性。 首先讓我們來(lái)了解一下,在消息隊(duì)列中,消息從生產(chǎn)者發(fā)送

    2024年02月05日
    瀏覽(35)
  • 【RabbitMQ】RabbitMQ 消息的可靠性 —— 生產(chǎn)者和消費(fèi)者消息的確認(rèn),消息的持久化以及消費(fèi)失敗的重試機(jī)制_rabbitmq 生產(chǎn)者消息確認(rèn)

    【RabbitMQ】RabbitMQ 消息的可靠性 —— 生產(chǎn)者和消費(fèi)者消息的確認(rèn),消息的持久化以及消費(fèi)失敗的重試機(jī)制_rabbitmq 生產(chǎn)者消息確認(rèn)

    先自我介紹一下,小編浙江大學(xué)畢業(yè),去過(guò)華為、字節(jié)跳動(dòng)等大廠,目前阿里P7 深知大多數(shù)程序員,想要提升技能,往往是自己摸索成長(zhǎng),但自己不成體系的自學(xué)效果低效又漫長(zhǎng),而且極易碰到天花板技術(shù)停滯不前! 因此收集整理了一份《2024年最新大數(shù)據(jù)全套學(xué)習(xí)資料》,

    2024年04月26日
    瀏覽(65)
  • 【初始RabbitMQ】持久化的實(shí)現(xiàn)

    【初始RabbitMQ】持久化的實(shí)現(xiàn)

    如何保障當(dāng) RabbitMQ 服務(wù)停掉以后消 息生產(chǎn)者發(fā)送過(guò)來(lái)的消息不丟失。默認(rèn)情況下 RabbitMQ 退出或由于某種原因崩潰時(shí),它忽視隊(duì)列 和消息,除非告知它不要這樣做。確保消息不會(huì)丟失需要做兩件事: 我們需要將隊(duì)列和消息都標(biāo)記為持久化 之前我們創(chuàng)建的隊(duì)列都是非持久化的

    2024年02月19日
    瀏覽(18)
  • 消息中間件之八股面試回答篇:一、問(wèn)題概覽+MQ的應(yīng)用場(chǎng)景+RabbitMQ如何保證消息不丟失(生產(chǎn)者確認(rèn)機(jī)制、持久化、消費(fèi)者確認(rèn)機(jī)制)+回答模板

    消息中間件之八股面試回答篇:一、問(wèn)題概覽+MQ的應(yīng)用場(chǎng)景+RabbitMQ如何保證消息不丟失(生產(chǎn)者確認(rèn)機(jī)制、持久化、消費(fèi)者確認(rèn)機(jī)制)+回答模板

    目前主流的消息隊(duì)列技術(shù)(MQ技術(shù))分為RabbitMQ和Kafka,其中深藍(lán)色為只要是MQ,一般都會(huì)問(wèn)到的問(wèn)題。淺藍(lán)色是針對(duì)RabbitMQ的特性的問(wèn)題。藍(lán)紫色為針對(duì)Kafka的特性的問(wèn)題。 MQ主要提供的功能為:異步 解耦 削峰 。 展開(kāi)來(lái)講就是 異步發(fā)送(驗(yàn)證碼、短信、郵件…) MYSQL和Redi

    2024年01月24日
    瀏覽(56)
  • RabbitMQ學(xué)習(xí)(五):RabbitMQ持久化

    RabbitMQ學(xué)習(xí)(五):RabbitMQ持久化

    在上一章內(nèi)容中我們已經(jīng)看到了如何處理任務(wù)不丟失的情況,但是如何保障當(dāng) RabbitMQ 服務(wù)停掉后消 息生產(chǎn)者發(fā)送過(guò)來(lái)的消息不丟失呢?默認(rèn)情況下 RabbitMQ 退出或由于某種原因崩潰時(shí),它將忽視隊(duì)列 和消息,除非告知它不要這樣做。 確保消息不會(huì)丟失需要做兩件事:我們需

    2024年02月16日
    瀏覽(19)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包