2023-08-08 10:29:15來源:全家桶實(shí)戰(zhàn)案例源碼
延遲隊(duì)列:簡單說就是發(fā)送出去的消息經(jīng)過給定的時間后,消費(fèi)者才能看見消息(消費(fèi)消息)。
這里簡單說下步驟:
創(chuàng)建一個隊(duì)列,如:bs-queue, 設(shè)置死信交換機(jī)(死信交換機(jī)路由key(這是可選的))及隊(duì)列,如:dead-exchange; 消息的消費(fèi)端監(jiān)聽該dead-queue隊(duì)列。設(shè)置消息有效期參數(shù)x-message-ttl參數(shù)(值為自己需要延遲的時間,單位:毫秒)。發(fā)送消息發(fā)送到bs-queue上。由于消息消費(fèi)端監(jiān)聽的是死信隊(duì)列,所以只需要等待指定的時間后消息會自動被轉(zhuǎn)發(fā)到死信隊(duì)列上(dead-queue)。消息的消費(fèi)端監(jiān)聽dead-queu隊(duì)列即可。優(yōu)先級隊(duì)列優(yōu)先級隊(duì)列是在RabbitMQ3.5.0之后的版本才支持的。
(資料圖片僅供參考)
具有高優(yōu)先級的隊(duì)列具有高的優(yōu)先權(quán),優(yōu)先級高的消息具備優(yōu)先被消費(fèi)的特權(quán)。
隊(duì)列的優(yōu)先級通過x-max-priority參數(shù)設(shè)置。
建立一個priority-exchange交換機(jī),類型:direct。
圖片
建立一個priority-queue隊(duì)列,并與priority-exchange綁定。
圖片
設(shè)置x-max-priority參數(shù)的值為100,表示最大優(yōu)先級為100。
注意:x-max-priority參數(shù)的值應(yīng)該介于1到255。建議使用1到10之間的隊(duì)列。如果設(shè)置的優(yōu)先級更大將使用更多的Erlang進(jìn)程消耗更多的CPU資源。運(yùn)行時調(diào)度也會受到影響。
接下來演示優(yōu)先級隊(duì)列
我們先只發(fā)送消息,然后再把消息的消費(fèi)功能打開。
發(fā)送消息接口:
@GetMapping("/sendPriority")public Object sendPriority(String msg, Integer priority) { ms.sendPriorityQueue(msg, priority) ; return "success" ;}public void sendPriorityQueue(String msg, Integer priority) { logger.info("準(zhǔn)備發(fā)送消息:{}", msg); Message message = MessageBuilder.withBody(msg.getBytes()).setPriority(priority).build() ; rabbitTemplate.convertAndSend("priority-exchange", "pe.msg", message) ;}
發(fā)送4條消息:
// 第一條消息msg=第一條消息&priority=2 // 第二條消息msg=第二條消息&priority=10// 第三條消息msg=第三條消息&priority=1// 第四條消息msg=第四條消息&priority=7
查看消息隊(duì)列:
圖片
消息消費(fèi)端:
@RabbitListener(queues = { "priority-queue" })@RabbitHandlerpublic void listenerPriority(Message message, Channel channel) { System.out.println("接受到消息.....income"); byte[] body = message.getBody(); MessageProperties mps = message.getMessageProperties(); String content = new String(body, Charset.forName("UTF-8")); try { System.out.println("接受到消息來自交換機(jī): 【" + mps.getReceivedExchange() + "】, 隊(duì)列:【" + mps.getConsumerQueue()+ "】:\n內(nèi)容: " + content); channel.basicAck(message.getMessageProperties().getDeliveryTag(), true); } catch (Exception e) { e.printStackTrace(); try { channel.basicReject(mps.getDeliveryTag(), false); } catch (IOException e1) { e1.printStackTrace() ; } }}
啟動服務(wù)
圖片
根據(jù)打印出的結(jié)果,正好是我們設(shè)置優(yōu)先級的順序輸出。
上面設(shè)置的消息優(yōu)先級都是在指定的范圍<100,如果消息的優(yōu)先級超過這個值會怎么樣呢?
發(fā)送8條消息:
// 第一條消息msg=第一條消息&priority=2 // 第二條消息msg=第二條消息&priority=10// 第三條消息msg=第三條消息&priority=1// 第四條消息msg=第四條消息&priority=7// 第五條消息msg=第五條消息&priority=101
消費(fèi)消息:
圖片
同樣是按照順序輸出的。
關(guān)鍵詞:
延遲隊(duì)列延遲隊(duì)列:簡單說就是發(fā)送出去的消息經(jīng)過給定的時間后,消費(fèi)者
在這篇文章中,我們將探討五個實(shí)用的Vue技巧,這些技巧可以使你日常使
8月8日消息,最近,AMD的fTPM隨機(jī)數(shù)生成器(RNG)出現(xiàn)了一個卡頓問題,
我們知道NFS分布式文件系統(tǒng)是一個客戶端-服務(wù)端架構(gòu)(CS架構(gòu))。其客戶
大模型風(fēng)起云涌,正在從虛擬世界進(jìn)入現(xiàn)實(shí)世界。谷歌DeepMind日前推出Ro
嗨,有時間嗎?夕陽這么好,不如和我去城市的街頭走一走罷!今天放空,
在距離天津市區(qū)140多公里的薊州區(qū)馬伸橋鎮(zhèn)邦博家庭農(nóng)場,農(nóng)場主劉愛博
針對當(dāng)前暑期以中小學(xué)生為主體的研學(xué)游市場火爆的實(shí)際,北京市文化市場
今天來聊聊011nba總決賽頒獎,2011nba總決賽錄像的文章,現(xiàn)在就為大家
同花順數(shù)據(jù)中心顯示,博遷新材8月7日獲融資買入751 54萬元,占當(dāng)日買入
斯巴魯LEVORGLayback預(yù)告圖將于9月發(fā)布日前,斯巴魯汽車發(fā)布了旗下LEVO
臨沂今日天氣今天是8月8日,星期二,農(nóng)歷六月廿二。晴轉(zhuǎn)多云,東北風(fēng)2
8月7日北向資金增持3 98萬股西部創(chuàng)業(yè)。近5個交易日中,獲北向資金減持
今天小魚來為大家解答以上問題,滿江紅,劇情解析很多人還不知道,現(xiàn)在
北京通州發(fā)布(bjtzfb)北京城市副中心官方微信通州小布(北京通州發(fā)布