" />

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

java實(shí)現(xiàn)Rabbitmq延遲隊(duì)列和惰性隊(duì)列

 更新時(shí)間:2023年12月25日 08:29:08   作者:kk變色龍13  
本文主要介紹了java實(shí)現(xiàn)Rabbitmq延遲隊(duì)列和惰性隊(duì)列,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

延遲隊(duì)列

當(dāng)一個(gè)隊(duì)列中的消息滿足下列情況之一,可以成為死信
(1)消費(fèi)者使用basic.rejectbasic.nack聲明消費(fèi)失敗,并且消息的requeue參數(shù)設(shè)置為false
(2)消息是一個(gè)過期消息,超時(shí)無人消費(fèi)
(3)要投遞的隊(duì)列消息堆積滿了,最早的消息可能成為死信
如果該隊(duì)列配置了dead-letter-exchange屬性,指定了一個(gè)交換機(jī),那么隊(duì)列中的死信就會(huì)投遞到這個(gè)交換機(jī)中,而這個(gè)交換機(jī)稱為死信交換機(jī)。
如何給隊(duì)列綁定死信交換機(jī)?
(1)給隊(duì)列設(shè)置dead-letter-exchange屬性,指定一個(gè)交換機(jī)
(2)給隊(duì)列設(shè)置dead-letter-routing-key屬性,設(shè)置死信交換機(jī)與死信隊(duì)列的RoutingKey

TTL(Time-To-Live)。如果一個(gè)隊(duì)列中的消息TTL結(jié)束仍未消費(fèi),則會(huì)變?yōu)樗佬?,TTL超時(shí)分為兩種情況:
(1)消息所在的隊(duì)列設(shè)置了存活時(shí)間
(2)消息本身設(shè)置了存活時(shí)間

利用TTL結(jié)合死信交換機(jī),實(shí)現(xiàn)了消息發(fā)出后,消費(fèi)者延遲收到消息的效果。這種消息模式就稱為延遲隊(duì)列模式。
延遲隊(duì)列的使用場(chǎng)景包括:
(1)延遲發(fā)送短信
(2)用戶下單,如果用戶在15 分鐘內(nèi)未支付,則自動(dòng)取消
(3)預(yù)約工作會(huì)議,20分鐘后自動(dòng)通知所有參會(huì)人員

DelayExchange的本質(zhì)還是官方的三種交換機(jī),只是添加了延遲功能。因此使用時(shí)只需要聲明一個(gè)交換機(jī),交換機(jī)的類型可以是任意類型,然后設(shè)定delayed屬性為true即可。
基于注解的方式:

@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "DelayQueue",durable = "true"),exchange = @Exchange(name = "delay-mq-exchange_B",delayed = "true"),key = "routingKey_delay"))
@Component
@Slf4j
public class DirectConsumer {
	......
}

基于Java代碼的方式:

	@Bean
    public Exchange orderExchange(){
        return ExchangeBuilder.topicExchange(RabbitMQExchanges.EXCHANGE_B.getExchange()).delayed().durable(true).build();

    }

向delay為true的交換機(jī)中發(fā)送消息,一定要給消息添加一個(gè)header:x-delay,值為延遲的時(shí)間,單位為毫秒:

Message message= MessageBuilder.withBody(String.valueOf(content).getBytes(StandardCharsets.UTF_8)).setHeader("delay-one",500000).build();

惰性隊(duì)列

**消息堆積問題:**當(dāng)生產(chǎn)者發(fā)送消息的速度超過了消費(fèi)者處理消息的速度,就會(huì)導(dǎo)致隊(duì)列中的消息堆積,直到隊(duì)列存儲(chǔ)消息達(dá)到上限。最早接收到的消息,可能就會(huì)成為死信,會(huì)被丟棄,這就是消息堆積問題。

惰性隊(duì)列的特征如下:
(1)接收到消息后直接存入磁盤而非內(nèi)存
(2)消費(fèi)者要消費(fèi)消息時(shí)才會(huì)從磁盤中讀取并加載到內(nèi)存
(3)支持?jǐn)?shù)百萬條的消息存儲(chǔ)
而要設(shè)置一個(gè)隊(duì)列為惰性隊(duì)列,只需要在聲明隊(duì)列時(shí),指定x-queue-mode屬性為lazy即可。用SpringAMQP聲明惰性隊(duì)列分兩種方式:
基于注解的方式:

@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "DelayQueue",durable = "true",arguments = @Argument(name = "x-dead-letter-exchange",value = "lazy")),exchange = @Exchange(name = "delay-mq-exchange_B",delayed = "true"),key = "routingKey_delay"))

基于Java代碼的方式:

	@Bean
    public Queue orderQueue(){
        return QueueBuilder.durable(RabbitMQQueue.RABBIT_MQ_QUEUE_A.getQueue()).lazy().build();
    }

到此這篇關(guān)于java實(shí)現(xiàn)Rabbitmq延遲隊(duì)列和惰性隊(duì)列的文章就介紹到這了,更多相關(guān)java Rabbitmq延遲隊(duì)列和惰性隊(duì)列內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Springboot中實(shí)現(xiàn)策略模式+工廠模式的方法

    Springboot中實(shí)現(xiàn)策略模式+工廠模式的方法

    這篇文章主要介紹了Springboot中實(shí)現(xiàn)策略模式+工廠模式,具體策略模式和工廠模式的UML我就不給出來了,使用這個(gè)這兩個(gè)模式主要是防止程序中出現(xiàn)大量的IF ELSE IF ELSE....,接下來咱們直接實(shí)現(xiàn)Springboot策略模式工廠模式
    2022-03-03
  • java 學(xué)習(xí)筆記(入門篇)_程序流程控制結(jié)構(gòu)和方法

    java 學(xué)習(xí)筆記(入門篇)_程序流程控制結(jié)構(gòu)和方法

    程序流程控制結(jié)構(gòu)分為:順序、選擇、循環(huán)以及異常處理結(jié)構(gòu),語句是程序的基本組成單位,一般來說語句的執(zhí)行流程是按順序來進(jìn)行的,但是當(dāng)遇到一些特殊的條件,比如循環(huán),這時(shí)候語句就會(huì)按照流程控制結(jié)構(gòu)來進(jìn)行了
    2013-01-01
  • 使用SSM+Layui+Bootstrap實(shí)現(xiàn)汽車維保系統(tǒng)的示例代碼

    使用SSM+Layui+Bootstrap實(shí)現(xiàn)汽車維保系統(tǒng)的示例代碼

    本文主要實(shí)現(xiàn)對(duì)汽車維修廠的信息化管理功能,。實(shí)現(xiàn)的主要功能包含用戶管理、配置管理、汽車管理、故障管理、供應(yīng)商管理、配件管理、維修訂單管理、統(tǒng)計(jì)信息、公告管理、個(gè)人信息管理,感興趣的可以了解一下
    2021-12-12
  • Springboot整合多數(shù)據(jù)源配置流程詳細(xì)講解

    Springboot整合多數(shù)據(jù)源配置流程詳細(xì)講解

    這篇文章主要介紹了Springboot整合多數(shù)據(jù)源配置流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-03-03
  • 關(guān)于Java應(yīng)用日志與Jaeger的trace關(guān)聯(lián)的問題

    關(guān)于Java應(yīng)用日志與Jaeger的trace關(guān)聯(lián)的問題

    這篇文章主要介紹了Java應(yīng)用日志如何與Jaeger的trace關(guān)聯(lián),通過jaeger發(fā)現(xiàn)這十次請(qǐng)求中有一次耗時(shí)特別長(zhǎng),想定位一下具體原因,感興趣的朋友跟隨小編一起看看吧
    2022-01-01
  • Kafka單節(jié)點(diǎn)偽分布式集群搭建實(shí)現(xiàn)過程詳解

    Kafka單節(jié)點(diǎn)偽分布式集群搭建實(shí)現(xiàn)過程詳解

    這篇文章主要介紹了Kafka單節(jié)點(diǎn)偽分布式集群搭建實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • java實(shí)現(xiàn)Floyd算法

    java實(shí)現(xiàn)Floyd算法

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)Floyd算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Java/Android 獲取網(wǎng)絡(luò)重定向文件的真實(shí)URL的示例代碼

    Java/Android 獲取網(wǎng)絡(luò)重定向文件的真實(shí)URL的示例代碼

    本篇文章主要介紹了Java/Android 獲取網(wǎng)絡(luò)重定向文件的真實(shí)URL的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Java利用樸素貝葉斯分類算法實(shí)現(xiàn)信息分類

    Java利用樸素貝葉斯分類算法實(shí)現(xiàn)信息分類

    貝葉斯分類算法是統(tǒng)計(jì)學(xué)的一種分類方法,它是一類利用概率統(tǒng)計(jì)知識(shí)進(jìn)行分類的算法。本文將利用樸素貝葉斯分類算法實(shí)現(xiàn)信息分類,需要的可以參考一下
    2022-06-06
  • SpringBoot集成WebSocket實(shí)現(xiàn)前后端消息互傳的方法

    SpringBoot集成WebSocket實(shí)現(xiàn)前后端消息互傳的方法

    這篇文章主要介紹了SpringBoot集成WebSocket實(shí)現(xiàn)前后端消息互傳的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10

最新評(píng)論

本溪市| 甘德县| 赞皇县| 姜堰市| 台中市| 永福县| 江川县| 二连浩特市| 榆中县| 左贡县| 新野县| 饶阳县| 赞皇县| 云霄县| 清丰县| 乌审旗| 宁安市| 化州市| 明星| 萍乡市| 广平县| 平顺县| 佛山市| 酉阳| 平阴县| 肥城市| 万州区| 扬中市| 天峻县| 武汉市| 宝丰县| 哈巴河县| 南昌县| 舟曲县| 宁强县| 泗水县| 库车县| 桃园市| 江阴市| 图木舒克市| 安龙县|