日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

面試官:RabbitMQ如何實現(xiàn)延遲隊列?

來源: 責(zé)編: 時間:2024-01-26 17:05:32 198觀看
導(dǎo)讀延遲隊列是指當(dāng)消息被發(fā)送以后,并不是立即執(zhí)行,而是等待特定的時間后,消費者才會執(zhí)行該消息。延遲隊列的使用場景有以下幾種:未按時支付的訂單,30 分鐘過期之后取消訂單。給活躍度比較低的用戶間隔 N 天之后推送消息,提高活

LG328資訊網(wǎng)——每日最新資訊28at.com

延遲隊列是指當(dāng)消息被發(fā)送以后,并不是立即執(zhí)行,而是等待特定的時間后,消費者才會執(zhí)行該消息。LG328資訊網(wǎng)——每日最新資訊28at.com

延遲隊列的使用場景有以下幾種:LG328資訊網(wǎng)——每日最新資訊28at.com

  1. 未按時支付的訂單,30 分鐘過期之后取消訂單。
  2. 給活躍度比較低的用戶間隔 N 天之后推送消息,提高活躍度。
  3. 新注冊會員的用戶,等待幾分鐘之后發(fā)送歡迎郵件等。

一、如何實現(xiàn)延遲隊列?

延遲隊列有以下兩種實現(xiàn)方式:LG328資訊網(wǎng)——每日最新資訊28at.com

  1. 通過消息過期后進入死信交換器,再由交換器轉(zhuǎn)發(fā)到延遲消費隊列,實現(xiàn)延遲功能;
  2. 使用官方提供的延遲插件實現(xiàn)延遲功能。

早期,大部分公司都會采用第一種方式,而隨著 RabbitMQ 3.5.7(2015 年底發(fā)布)的延遲插件的發(fā)布,因為其使用更簡單、更方便,所以它現(xiàn)在才是大家普通會采用的,實現(xiàn)延遲隊列的方式,所以本文也只講第二種方式。LG328資訊網(wǎng)——每日最新資訊28at.com

二、實現(xiàn)延遲隊列

1、安裝并啟動延遲隊列

(1)下載延遲插件

https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases.LG328資訊網(wǎng)——每日最新資訊28at.com

注意:需要根據(jù)你自己的 RabbitMQ 服務(wù)器端版本選擇相同版本的延遲插件,可以在 RabbitMQ 控制臺查看:LG328資訊網(wǎng)——每日最新資訊28at.com

LG328資訊網(wǎng)——每日最新資訊28at.com

LG328資訊網(wǎng)——每日最新資訊28at.com

(2)將插件放到插件目錄

接下來,將上一步下載的插件放到 RabbitMQ 服務(wù)器安裝目錄,如果是 docker,使用一下命令復(fù)制:LG328資訊網(wǎng)——每日最新資訊28at.com

docker cp 宿主機文件 容器名稱或ID:容器目錄LG328資訊網(wǎng)——每日最新資訊28at.com

如下圖所示:LG328資訊網(wǎng)——每日最新資訊28at.com

LG328資訊網(wǎng)——每日最新資訊28at.com

之后,進入 docker 容器,查看插件中是否包含延遲隊列:LG328資訊網(wǎng)——每日最新資訊28at.com

docker exec -it 容器名稱或ID /bin/bash rabbitmq-plugins listLG328資訊網(wǎng)——每日最新資訊28at.com

如下圖所示:LG328資訊網(wǎng)——每日最新資訊28at.com

LG328資訊網(wǎng)——每日最新資訊28at.com

(3)啟動插件

rabbitmq-plugins enable rabbitmq_delayed_message_exchangeLG328資訊網(wǎng)——每日最新資訊28at.com

如下圖所示:LG328資訊網(wǎng)——每日最新資訊28at.com

LG328資訊網(wǎng)——每日最新資訊28at.com

(4)重啟RabbitMQ服務(wù)

安裝完 RabbitMQ 插件之后,需要重啟 RabbitMQ 服務(wù)才能生效。如果使用的是 Docker,只需要重啟 Docker 容器即可:LG328資訊網(wǎng)——每日最新資訊28at.com

docker restart 容器名稱或IDLG328資訊網(wǎng)——每日最新資訊28at.com

如下圖所示:LG328資訊網(wǎng)——每日最新資訊28at.com

LG328資訊網(wǎng)——每日最新資訊28at.com

(5)驗收結(jié)果

在 RabbitMQ 控制臺查看,新建交換機時是否有延遲消息選項,如果有就說明延遲消息插件已經(jīng)正常運行了,如下圖所示:LG328資訊網(wǎng)——每日最新資訊28at.com

LG328資訊網(wǎng)——每日最新資訊28at.com

(6)手動創(chuàng)建延遲交換器(可選)

此步驟可選(非必須),因為某些版本下通過程序創(chuàng)建延遲交換器可能會出錯,如果出錯了,手動創(chuàng)建延遲隊列即可,如下圖所示:LG328資訊網(wǎng)——每日最新資訊28at.com

LG328資訊網(wǎng)——每日最新資訊28at.com

2、編寫延遲消息實現(xiàn)代碼

(1)配置交換器和隊列

import org.springframework.context.annotation.Configuration;import org.springframework.amqp.core.*;import org.springframework.context.annotation.Bean;/** * 延遲交換器和隊列 */@Configurationpublic class DelayedExchangeConfig {    public static final String EXCHANGE_NAME = "myDelayedExchange";    public static final String QUEUE_NAME = "delayed.queue";    public static final String ROUTING_KEY = "delayed.routing.key";    @Bean    public CustomExchange delayedExchange() {        return new CustomExchange(EXCHANGE_NAME,                "x-delayed-message", // 消息類型                true, // 是否持久化                false); // 是否自動刪除    }    @Bean    public Queue delayedQueue() {        return QueueBuilder.durable(QUEUE_NAME)                .withArgument("x-delayed-type", "direct")                .build();    }    @Bean    public Binding delayedBinding(Queue delayedQueue,CustomExchange delayedExchange) {        return BindingBuilder.bind(delayedQueue()).to(delayedExchange()).with(ROUTING_KEY).noargs();    }}

(2)定義消息發(fā)送方法

import org.springframework.amqp.rabbit.core.RabbitTemplate;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Component;@Componentpublic class DelayedMessageProducer {    @Autowired    private RabbitTemplate rabbitTemplate;    @Scheduled(fixedDelay = 5000)    public void sendDelayedMessage(String message) {        rabbitTemplate.convertAndSend(DelayedExchangeConfig.EXCHANGE_NAME,                DelayedExchangeConfig.ROUTING_KEY,                message,                messagePostProcessor -> {                    messagePostProcessor.getMessageProperties().setDelay(10000); // 設(shè)置延遲時間,單位毫秒                    return messagePostProcessor;                });    }}

(3)發(fā)送延遲消息

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/delayed")public class DelayedMessageController {    @Autowired    private DelayedMessageProducer delayedMessageProducer;    @GetMapping("/send")    public String sendDirectMessage(@RequestParam String message) {        delayedMessageProducer.sendDelayedMessage(message);        return "Delayed message sent to Exchange: " + message;    }}

(4)接收延遲消息

import org.springframework.amqp.rabbit.annotation.RabbitListener;import org.springframework.stereotype.Component;@Componentpublic class DelayedMessageConsumer {    @RabbitListener(queues = DelayedExchangeConfig.QUEUE_NAME)    public void receiveDelayedMessage(String message) {        System.out.println("Received delayed message: " + message);    }}

小結(jié)

實現(xiàn) RabbitMQ 延遲隊列目前主流的實現(xiàn)方式,是采用官方提供的延遲插件來實現(xiàn)。而延遲插件需要先下載插件、然后配置并重啟 RabbitMQ 服務(wù),之后就可以通過編寫代碼的方式實現(xiàn)延遲隊列了。LG328資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-69002-0.html面試官:RabbitMQ如何實現(xiàn)延遲隊列?

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 靈活運用動態(tài)內(nèi)存管理[new、delete]

下一篇: 如何優(yōu)雅的發(fā)布一個 TypeScript 軟件包?

標簽:
  • 熱門焦點
  • 一加Ace2 Pro官宣:普及16G內(nèi)存 引領(lǐng)24G

    一加官方今天繼續(xù)為本月發(fā)布的新機一加Ace2 Pro帶來預(yù)熱,公布了內(nèi)存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引領(lǐng),還有呢?#一加Ace2Pro#,2023 年 8 月,敬請期待?!蓖瑫r
  • 紅魔電競平板評測:大屏幕硬實力

    前言:三年的疫情因為要上網(wǎng)課的原因激活了平板市場,如今網(wǎng)課的時代已經(jīng)過去,大家的生活都恢復(fù)到了正軌,這也就意味著,真正考驗平板電腦生存的環(huán)境來了。也就是面對著這種殘酷的
  • Redmi Buds 4開箱簡評:才199還有降噪 可以無腦入

    在上個月舉辦的Redmi Note11T Pro系列新機發(fā)布會上,除了兩款手機新品之外,Redmi還帶來了兩款TWS真無線藍牙耳機產(chǎn)品,Redmi Buds 4和Redmi Buds 4 Pro,此前我們在Redmi Note11T
  • K8S | Service服務(wù)發(fā)現(xiàn)

    一、背景在微服務(wù)架構(gòu)中,這里以開發(fā)環(huán)境「Dev」為基礎(chǔ)來描述,在K8S集群中通常會開放:路由網(wǎng)關(guān)、注冊中心、配置中心等相關(guān)服務(wù),可以被集群外部訪問;圖片對于測試「Tes」環(huán)境或者
  • 得物寵物生意「狂飆」,發(fā)力“它經(jīng)濟”

    作者|花花小萌主近日,得物宣布正式上線寵物鑒別,通過得物App內(nèi)的“在線鑒別”,可找到鑒別寵物的選項。通過上傳自家寵物的部位細節(jié),就能收獲擁有專業(yè)資質(zhì)認證的得物鑒
  • 東方甄選單飛:有些鳥注定是關(guān)不住的

    作者:彭寬鴻來源:華爾街科技眼‍‍‍‍‍‍‍‍‍‍東方甄選創(chuàng)始人俞敏洪帶隊的“7天甘肅行”直播活動已在近日順利收官。成立后一
  • 華為開發(fā)者大會2023日程公開:開設(shè)鴻蒙HarmonyOS 4體驗區(qū)

    IT之家 7 月 31 日消息,華為今日公布了 HDC.Together 開發(fā)者大會 2023 的詳細日程。整場大會將于 8 月 4 日-6 日之間舉行,屆時將發(fā)布最新一代鴻蒙 H
  • 華為Mate60標準版細節(jié)曝光:經(jīng)典星環(huán)相機模組回歸

    這段時間以來,關(guān)于華為新旗艦的爆料日漸密集。據(jù)此前多方爆料,今年華為將開始恢復(fù)一年雙旗艦戰(zhàn)略,除上半年推出的P60系列外,往年下半年的Mate系列也將
  • iQOO 11S評測:行業(yè)唯一的200W標準版旗艦

    【Techweb評測】去年底,iQOO推出了“電競旗艦”iQOO 11系列,作為一款性能強機,該機不僅全球首發(fā)2K 144Hz E6全感屏,搭載了第二代驍龍8平臺及144Hz電競
Top 主站蜘蛛池模板: 扎赉特旗| 开化县| 东乌珠穆沁旗| 高陵县| 邮箱| 莎车县| 抚宁县| 自贡市| 东安县| 行唐县| 易门县| 凤山市| 广安市| 玛曲县| 泰宁县| 电白县| 加查县| 鄂托克旗| 泰和县| 修文县| 两当县| 东城区| 营山县| 阿尔山市| 木里| 资阳市| 聊城市| 阜宁县| 襄汾县| 大安市| 灵石县| 芷江| 理塘县| 绩溪县| 襄汾县| 浮梁县| 西盟| 阿巴嘎旗| 临湘市| 礼泉县| 秦皇岛市|