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

當前位置:首頁 > 科技  > 軟件

面試官:RabbitMQ如何實現延遲隊列?

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

zCY28資訊網——每日最新資訊28at.com

延遲隊列是指當消息被發送以后,并不是立即執行,而是等待特定的時間后,消費者才會執行該消息。zCY28資訊網——每日最新資訊28at.com

延遲隊列的使用場景有以下幾種:zCY28資訊網——每日最新資訊28at.com

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

一、如何實現延遲隊列?

延遲隊列有以下兩種實現方式:zCY28資訊網——每日最新資訊28at.com

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

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

二、實現延遲隊列

1、安裝并啟動延遲隊列

(1)下載延遲插件

https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases.zCY28資訊網——每日最新資訊28at.com

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

zCY28資訊網——每日最新資訊28at.com

zCY28資訊網——每日最新資訊28at.com

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

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

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

如下圖所示:zCY28資訊網——每日最新資訊28at.com

zCY28資訊網——每日最新資訊28at.com

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

docker exec -it 容器名稱或ID /bin/bash rabbitmq-plugins listzCY28資訊網——每日最新資訊28at.com

如下圖所示:zCY28資訊網——每日最新資訊28at.com

zCY28資訊網——每日最新資訊28at.com

(3)啟動插件

rabbitmq-plugins enable rabbitmq_delayed_message_exchangezCY28資訊網——每日最新資訊28at.com

如下圖所示:zCY28資訊網——每日最新資訊28at.com

zCY28資訊網——每日最新資訊28at.com

(4)重啟RabbitMQ服務

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

docker restart 容器名稱或IDzCY28資訊網——每日最新資訊28at.com

如下圖所示:zCY28資訊網——每日最新資訊28at.com

zCY28資訊網——每日最新資訊28at.com

(5)驗收結果

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

zCY28資訊網——每日最新資訊28at.com

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

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

zCY28資訊網——每日最新資訊28at.com

2、編寫延遲消息實現代碼

(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)定義消息發送方法

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); // 設置延遲時間,單位毫秒                    return messagePostProcessor;                });    }}

(3)發送延遲消息

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

小結

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

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

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

上一篇: 靈活運用動態內存管理[new、delete]

下一篇: 如何優雅的發布一個 TypeScript 軟件包?

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
最新精品在线| 狠狠综合久久| 国产欧美精品一区二区三区介绍| 午夜国产精品视频免费体验区| 又紧又大又爽精品一区二区| 欧美网站大全在线观看| 玖玖在线精品| 欧美中文在线观看国产| 99综合在线| 亚洲黄色高清| 极品中文字幕一区| 国产主播精品| 国产欧美一区二区视频| 欧美午夜电影完整版| 欧美电影美腿模特1979在线看| 欧美在线free| 亚洲一区综合| 9l视频自拍蝌蚪9l视频成人| 在线电影一区| 狠狠久久亚洲欧美| 国产在线精品二区| 黄色成人在线观看| 黄色亚洲在线| 在线视频欧美日韩精品| 99精品热视频只有精品10| 亚洲一区不卡| 亚洲欧美日韩在线一区| 亚洲视频在线观看免费| 亚洲一二三区在线| 久久久综合网| 久久视频在线看| 久久免费高清视频| 欧美网站在线观看| 136国产福利精品导航网址应用| 精品成人一区二区三区四区| 一片黄亚洲嫩模| 久久久国产精品一区| 久久精视频免费在线久久完整在线看| 欧美成人免费全部| 欧美大片免费久久精品三p| 欧美 日韩 国产 一区| 国产精品久久久久久久久久妞妞 | 欧美第一黄色网| 国产麻豆精品久久一二三| 国产日韩欧美视频在线| 国产一区二区久久| 激情久久五月| 亚洲午夜在线观看| 亚洲欧美日韩精品久久奇米色影视| 中文欧美在线视频| 欧美一级片久久久久久久| 欧美一区不卡| 欧美日韩一区二| 国产精品视屏| 国产亚洲在线| 一区二区视频欧美| 亚洲一区视频| 久久国产精品黑丝| 久久se精品一区精品二区| 欧美特黄一级| 国产日韩欧美91| 亚洲高清在线| 99国产精品视频免费观看| 亚洲一区二区精品在线| 欧美精品国产一区二区| 国产精品成人一区二区三区吃奶 | 精品va天堂亚洲国产| 欧美一区二区成人| 快播亚洲色图| 欧美精品在线观看| 国产精品理论片在线观看| 国产精自产拍久久久久久| 一本一道久久综合狠狠老精东影业| 欧美成熟视频| 亚洲国产小视频| 欧美日韩岛国| 久久久五月天| 欧美精品激情blacked18| 国产精品久久久久影院亚瑟 | 在线精品视频一区二区| 中文国产一区| 久久精品首页| 欧美日韩综合在线| 亚洲伦理久久| 欧美一区二区| 欧美成人午夜免费视在线看片| 欧美日韩一区二区欧美激情| 国产伦精品一区二区三区四区免费 | 欧美一区1区三区3区公司| 国产日韩欧美在线播放| 欧美专区第一页| 好看不卡的中文字幕| 久久色中文字幕| 亚洲国产黄色| 欧美激情一区二区三区四区| 国产日韩欧美日韩大片| 久久不见久久见免费视频1| 国产日韩欧美视频| 久久久久久婷| 亚洲激情一区| 奶水喷射视频一区| 国产欧美精品日韩| 久久激情中文| 国产精品激情| 亚洲精品日韩激情在线电影| 久久精品亚洲| 亚洲福利一区| 欧美在线三区| 国产精品久久久久久久app| 亚洲片区在线| 久久亚洲欧洲| 亚洲精品美女久久久久| 国产精品va在线| 亚洲美女91| 国产精品久久久久aaaa九色| 欧美在线电影| 亚洲国产成人午夜在线一区| 欧美一区二区观看视频| 国产在线不卡| 亚洲欧美中文在线视频| 狠狠色香婷婷久久亚洲精品| 欧美韩日精品| 亚洲国产精品尤物yw在线观看| 欧美理论电影在线观看| 亚洲欧美综合v| 狠狠色丁香久久综合频道| 欧美精品一区二| 午夜久久久久| 国产精品男人爽免费视频1| 亚洲一级特黄| 黄色成人在线网址| 欧美日韩精品高清| 亚洲视频精选在线| 国产亚洲aⅴaaaaaa毛片| 嫩草影视亚洲| 亚洲欧美国产毛片在线| 国产精品老牛| 美女网站久久| 亚洲激情欧美| 国产精品美女久久久| 久久免费黄色| 亚洲深夜福利视频| 精品不卡一区| 国产精品成人一区二区艾草| 午夜精品区一区二区三| 亚洲春色另类小说| 国产精品亚洲一区| 你懂的视频一区二区| 亚洲欧美日韩国产成人精品影院| 亚洲福利免费| 国产欧美91| 久久久亚洲欧洲日产国码αv | 亚洲电影免费在线观看| 国产精品成人免费精品自在线观看| 麻豆免费精品视频| 欧美黄色一区| 欧美制服丝袜| 在线视频欧美日韩| 国产精品国产自产拍高清av王其| 久久综合网hezyo| 先锋亚洲精品| 一区二区三区av| 国产精品揄拍一区二区| 欧美日韩精品三区| 美女亚洲精品| 久久激情视频免费观看| 亚洲一区二区在线播放| 亚洲日本电影在线| 欧美性猛交xxxx免费看久久久| 久久亚洲精品中文字幕冲田杏梨| 亚洲专区一区| 日韩视频在线播放| 国产精品色午夜在线观看| 欧美国产日韩一区二区三区| 亚洲午夜久久久| 亚洲精品乱码视频| 一区二区三区无毛| 国产婷婷精品| 国产乱肥老妇国产一区二| 欧美涩涩网站| 欧美精品三区| 欧美一区二区免费| 亚洲香蕉成视频在线观看| 亚洲美女精品成人在线视频| 亚洲激情在线| 亚洲国产视频一区二区| 在线日韩欧美视频| 国产精品美女久久久久久久| 欧美欧美全黄| 欧美精品一区二区三区四区| 欧美大胆成人| 欧美高清视频免费观看| 免费成人网www| 蜜臀久久99精品久久久久久9 | 激情综合久久| 韩国女主播一区| 欧美亚洲第一页| 欧美日韩1234| 欧美日韩三级| 免费日韩成人| 免费看亚洲片| 性xx色xx综合久久久xx| 亚洲欧美日韩国产综合精品二区| 亚洲视频每日更新|