RabbitMQ延時隊列(實現定時任務)

消息的TTL(Time To Live)就是消息的存活時間。

RabbitMQ可以對隊列和消息分別設置TTL。

對隊列設置存活時間,就是隊列沒有消費者連著的保留時間。

對每一個單獨的消息單獨的設置存活時間。超過了這個時間,我們認為這個消息就死了,稱之為死信。

如果隊列設置了TTL,消息也設置了,那么會取小的。所以一個消息如果被路由到不同的隊列中,這個消息死亡的時間有可能不一樣(不同的隊列設置)。這里單講單個消息的TTL,因為它才是實現延遲任務的關鍵。可以通過設置消息的expiration字段或者xmessage-ttl屬性來設置時間,兩者是一樣的效果。

死信路由?

一個消息在成為死信后,會進死信路由。

記住這里是路由而不是隊列,一個路由可以對應很多隊列。(什么是死信)

普通消息成為死信的條件:死信將被路由到死信交換機、再路由到普通隊列,普通隊列發送消息給消費者。

被拒收的消息:一個消息被Consumer拒收了,并且reject方法的參數里requeue是false。也就是說不會被再次放在隊列里,被其他消費者使用。(basic.reject/ basic.nack)requeue=false
TTL到期的消息:

消息的TTL到了,消息過期了。被隊列丟棄的消息:

隊列的長度限制滿了。排在前面的消息會被丟棄或者扔到死信路由上

死信交換機?

死信交換機Dead Letter Exchange其實就是一種普通的exchange,和創建其他exchange沒有兩樣。只是在某一個設置Dead Letter Exchange的隊列中有消息過期了,會自動觸發消息的轉發,發送到Dead Letter Exchange中去。

延時隊列?

先設置消息在TTL后變成死信,再設置隊列里死信統一被路由到一個指定的交換機,那個指定的交換機專門處理死信,達成延時隊列的效果。

手動ack&異常消息統一放在一個隊列處理建議的兩種方式

catch異常后,手動發送到指定隊列,然后使用channel給rabbitmq確認消息已消費

給Queue綁定死信隊列,使用nack(requque為false)確認消息消費失敗

?
?

/*** 創建隊列,交換機,延遲隊列,綁定關系 的configuration* 不會重復創建覆蓋* 1、第一次使用隊列【監聽】的時候才會創建* 2、Broker沒有隊列、交換機才會創建*/
@Configuration
public class MyRabbitMQConfig {// ? ?@RabbitHandler
// ? ?public void listen(Message message){
// ? ? ? ?System.out.println("收到消息:------>"+message);
// ? ?}/*** 延時隊列* @return*/@Beanpublic Queue orderDelayQueue(){HashMap<String, Object> arguments = new HashMap<>();/*** x-dead-letter-exchange :order-event-exchange 設置死信路由* x-dead-letter-routing-key : order.release.order 設置死信路由鍵* x-message-ttl :60000*/arguments.put("x-dead-letter-exchange","order-event-exchange");arguments.put("x-dead-letter-routing-key","order.release.order");arguments.put("x-message-ttl",30000);Queue queue = new Queue("order.delay.queue", true, false, false,arguments);return queue;}/*** 死信隊列* @return*/@Beanpublic Queue orderReleaseQueue(){Queue queue = new Queue("order.release.order.queue",true,false,false);return queue;}/*** 死信路由[普通路由]* @return*/@Beanpublic Exchange orderEventExchange(){/** ? String name,* ? boolean durable,* ? boolean autoDelete,* ? Map<String, Object> arguments* */TopicExchange topicExchange = new TopicExchange("order-event-exchange",true,false);return topicExchange;}/*** 交換機與延時隊列的綁定* @return*/@Beanpublic Binding orderCreateOrderBinding(){/** String destination, 目的地(隊列名或者交換機名字)* DestinationType destinationType, 目的地類型(Queue、Exhcange)* String exchange,* String routingKey,* Map<String, Object> arguments* */Binding binding = new Binding("order.delay.queue",Binding.DestinationType.QUEUE,"order-event-exchange","order.create.order",null);return binding;}/*** 死信路由與普通死信隊列的綁定* @return*/@Beanpublic Binding orderReleaseOrderBinding(){Binding binding = new Binding("order.release.order.queue",Binding.DestinationType.QUEUE,"order-event-exchange","order.release.order",null);return binding;}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/35669.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/35669.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/35669.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

代碼隨想錄算法訓練營:19/60

非科班學習算法day19 | LeetCode530:二叉搜索樹的最小絕對差 &#xff0c;Leetcode501:二叉搜索樹的眾數 &#xff0c;Leetcode236:二叉樹的最近公共祖先 目錄 介紹 一、LeetCode題目 1.LeetCode530:二叉搜索樹的最小絕對差 題目解析 2.Leetcode501: 二叉搜索樹的眾數 …

軟設之加工邏輯之結構化語言

結構化語言是一種介于自然語言和形式化語言之間的半形式語言&#xff0c;是自然語言的一個受限子集 外層&#xff1a;用來描述控制結構&#xff0c;采用順序&#xff0c;選擇和重復3種基本結構 1.順序結構&#xff1a;一組祈使語句&#xff0c;選擇語句&#xff0c;重復語句的…

個人對JVM的一點理解

JVM&#xff08;Java 虛擬機&#xff09;是 Java 程序能夠跨平臺運行的關鍵。它負責將 Java 字節碼轉換為機器碼并執行。 JVM 主要由類加載器、運行時數據區、執行引擎和本地方法接口等部分組成。運行時數據區包括方法區、堆、虛擬機棧、本地方法棧和程序計數器等。 GC&#xf…

遠期利率(Forward Rate)是什么?以及遠期利率在期貨合約中的應用

遠期利率是什么&#xff1f; 中文版 遠期利率&#xff08;Forward Rate&#xff09;是指從未來某一時間段開始適用的利率。它是金融市場上的一種合約利率&#xff0c;表示在某個特定日期開始的一段時間內的預期利率。這種利率可以通過現有的即期利率&#xff08;Spot Rate&am…

6.26考試前總結

一、選擇 1、運算符重載&#xff1a;&#xff08;1&#xff09;不可重載&#xff1a;. .* :: ?: sizeof &#xff08;2&#xff09;只成員函數&#xff1a;、[]、&#xff08;&#xff09;、-> ps:和[]需要加&&#xff0c;返回類&#xff0c;[]返回中括號內…

SpringBoot根據不同IP限制接口的QPS

根據對方IP地址來限制接口的QPS&#xff08;每秒查詢率&#xff09;&#xff0c;你可以結合Spring Boot應用、Guava的RateLimiter或者自定義的并發控制邏輯來實現。以下是一個基于Guava RateLimiter和Spring Boot的示例&#xff0c;展示如何根據IP地址來限制接口的QPS&#xff…

鏡頭下的光學

說實話&#xff0c;當我看到幾何光學的內容全是初中的解析幾何的時候&#xff0c;我就覺得講的方式太原始了&#xff0c;而且太過復雜也看不懂。所以我嘗試做了數學建模&#xff0c;發現建模之后模型可以解釋一些物理現象&#xff0c;也不會有矛盾的地方&#xff0c;那就算過得…

【Python系列】探索 Python 環境管理工具:conda 與 pip 的比較

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

簡過網:專科生可以考的編制崗位有哪些?這5個鐵飯碗要抓住了!

專科生可以考的編制崗位有哪些&#xff1f;以下這幾種可以考的&#xff0c;尤其是應屆畢業生&#xff0c;一定要抓住機會哦&#xff01; ? 一、三支一扶&#xff1a;專科生可報考&#xff0c;期滿可轉編。 三支一扶&#xff1a;支農、支醫生、支教、扶貧 工作時間一般為2年&…

深入探索Postman:前置與后置腳本的編寫與應用

Postman是一款廣受歡迎的API開發和測試工具&#xff0c;它提供了豐富的功能來簡化接口測試過程。在Postman中&#xff0c;前置腳本&#xff08;Pre-request Script&#xff09;和后置腳本&#xff08;Tests Script&#xff09;是兩個強大的功能&#xff0c;允許用戶在發送請求之…

秋招Java后端開發沖刺——非關系型數據庫篇(Redis)

一、非關系型數據庫 1. 主要針對的是鍵值、文檔以及圖形類型數據存儲。 2. 特點&#xff1a; 特點說明靈活的數據模型支持多種數據模型&#xff08;文檔、鍵值、列族、圖&#xff09;&#xff0c;無需預定義固定的表結構&#xff0c;能夠處理各種類型的數據。高擴展性設計為水…

安全技術和防火墻(一)

安全技術和防火墻 安全技術 入侵檢測系統&#xff1a;特點是不阻斷網絡訪問&#xff0c;主要提供報警和事后監督 不主動介入 (監控) 入侵防御系統&#xff1a;透明模式工作 &#xff0c;數據包,網絡監控,服務攻擊,木馬,蠕蟲,系統漏洞 等 進行準確的分析判斷 判斷為攻擊行為后會…

高校心理咨詢管理系統

摘 要 隨著高校學生心理問題的增多&#xff0c;心理咨詢服務在高校中的重要性日益凸顯。然而&#xff0c;傳統的心理咨詢管理方式存在著諸多問題&#xff0c;如信息不透明、咨詢師資源不足等。為了解決這些問題&#xff0c;本文設計并實現了一種基于Java Web的高校心理咨詢管理…

model_json_schema

model_json_schema示列 from pydantic import BaseModel, Field, ValidationError, field_validatorclass User(BaseModel):id: int Field(default0, lt100, gt0)username: stremail: strfield_validator(username)def name_must_alpha(cls, v):assert v.isalpha(), name mus…

浸式冷卻設計參數

每天一篇行業發展資訊&#xff0c;讓大家更及時了解外面的世界。 更多資訊&#xff0c;請關注B站/公眾號【萊歌數字】&#xff0c;有視頻教程~~ 兩相被動浸入冷卻是指使用改變相的沸騰液體來去除一個或多個表面的熱量的冷卻系統。 然后蒸汽被移動到冷凝器&#xff0c;然后被…

LaTeX中添加矩陣分塊虛線并設置虛線疏密

對于大型矩陣&#xff0c;有時需要添加分塊虛線。 方法為使用arydshln宏包&#xff0c;然后在array環境中設置虛線。需要注意的是&#xff0c;使用矩陣環境需要搭配amsmath宏包使用&#xff0c;且需放在amsmath宏包之后。即導言區設置為 \usepackage{amsmath} \usepackage{ary…

日語培訓日語等級考試柯橋小語種學習語言學校

什么是外來語 外來語是指在日本的國語中使用的來源于外國語言的詞匯。但狹義上的外來語則是指來源于歐美國家語言的詞匯&#xff0c;其中大部分是來源于英美語系的詞匯。日語中的漢語詞匯很多&#xff0c;大多是自古以來從中國引進的&#xff0c;從外來語的定義看&#xff0c;漢…

NLP邏輯層次模型|跳出局限,站在更高維度認識自己

什么是NLP邏輯層次模型 N-Neuro&#xff1a;指神經系統&#xff0c;包括生理基礎&#xff08;大腦&#xff09;和思維運作過程 L-Linguistic&#xff1a;指語言&#xff0c;感覺信號輸出——構成意思的過程 P-Programming&#xff1a;指程序&#xff0c;大腦產生某結論后要具體…

【干貨】Vue3 組件通信方式詳解

前言 毫無疑問&#xff0c;組件通信是Vue中非常重要的技術之一&#xff0c;它的出現能夠使我們非常方便的在不同組件之間進行數據的傳遞&#xff0c;以達到數據交互的效果。所以&#xff0c;學習組件通信技術是非常有必要的&#xff0c;本文將總結Vue中關于組件通信的八種方式…

代碼隨想錄算法訓練營DAY49|300.最長遞增子序列、 674. 最長連續遞增序列、718. 最長重復子數組

300.最長遞增子序列 題目鏈接&#xff1a;300.最長遞增子序列dp初始化為1&#xff08;最小子序列長度為1&#xff09; class Solution(object):def lengthOfLIS(self, nums):""":type nums: List[int]:rtype: int"""dp [1]*len(nums)result …