" />

欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實現Rabbitmq延遲隊列和惰性隊列

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

延遲隊列

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

TTL(Time-To-Live)。如果一個隊列中的消息TTL結束仍未消費,則會變?yōu)樗佬牛琓TL超時分為兩種情況:
(1)消息所在的隊列設置了存活時間
(2)消息本身設置了存活時間

利用TTL結合死信交換機,實現了消息發(fā)出后,消費者延遲收到消息的效果。這種消息模式就稱為延遲隊列模式。
延遲隊列的使用場景包括:
(1)延遲發(fā)送短信
(2)用戶下單,如果用戶在15 分鐘內未支付,則自動取消
(3)預約工作會議,20分鐘后自動通知所有參會人員

DelayExchange的本質還是官方的三種交換機,只是添加了延遲功能。因此使用時只需要聲明一個交換機,交換機的類型可以是任意類型,然后設定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的交換機中發(fā)送消息,一定要給消息添加一個header:x-delay,值為延遲的時間,單位為毫秒:

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

惰性隊列

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

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

@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();
    }

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

相關文章

  • SpringBoot+Security 發(fā)送短信驗證碼的實現

    SpringBoot+Security 發(fā)送短信驗證碼的實現

    這篇文章主要介紹了SpringBoot+Security 發(fā)送短信驗證碼的實現,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Java png圖片修改像素rgba值的操作

    Java png圖片修改像素rgba值的操作

    這篇文章主要介紹了Java png圖片修改像素rgba值的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java 的雙重分發(fā)與 Visitor 模式實例詳解

    Java 的雙重分發(fā)與 Visitor 模式實例詳解

    這篇文章主要介紹了Java 的雙重分發(fā)與 Visitor 模式實例詳解,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-07-07
  • 關于maven使用過程中無法導入依賴的一些總結

    關于maven使用過程中無法導入依賴的一些總結

    這篇文章主要介紹了關于maven使用過程中無法導入依賴的一些總結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • SpringMVC中的ConversionServiceExposingInterceptor工具類解析

    SpringMVC中的ConversionServiceExposingInterceptor工具類解析

    這篇文章主要介紹了SpringMVC中的ConversionServiceExposingInterceptor工具類解析,ConversionServiceExposingInterceptor是Spring MVC的一個HandlerInterceptor,用于向請求添加一個屬性,需要的朋友可以參考下
    2023-12-12
  • swing中Tree與滾動條用法實例分析

    swing中Tree與滾動條用法實例分析

    這篇文章主要介紹了swing中Tree與滾動條用法,以實例形式分析了java基于swing實現圖形界面的使用技巧,需要的朋友可以參考下
    2015-09-09
  • SpringBoot實現分頁功能

    SpringBoot實現分頁功能

    這篇文章主要為大家詳細介紹了SpringBoot實現分頁功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 關于post請求內容無法重復獲取的解決方法

    關于post請求內容無法重復獲取的解決方法

    這篇文章主要介紹了關于post請求內容無法重復獲取的解決方法,文中通過代碼示例給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-03-03
  • 關于注解式的分布式Elasticsearch的封裝案例

    關于注解式的分布式Elasticsearch的封裝案例

    這篇文章主要介紹了關于注解式的分布式Elasticsearch的封裝案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • idea 創(chuàng)建properties配置文件的步驟

    idea 創(chuàng)建properties配置文件的步驟

    這篇文章主要介紹了idea 創(chuàng)建properties配置文件的步驟,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01

最新評論