91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中怎么利用RabbitMQ實現一個延遲隊列功能

發布時間:2021-07-07 15:43:24 來源:億速云 閱讀:388 作者:Leah 欄目:編程語言

本篇文章給大家分享的是有關C#中怎么利用RabbitMQ實現一個延遲隊列功能,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

一、 需求背景

當用戶在商城上進行下單支付,我們假設如果8小時沒有進行支付,那么就后臺自動對該筆交易的狀態修改為訂單關閉取消,同時給用戶發送一份郵件提醒。那么我們應用程序如何實現這樣的需求場景呢?在之前的《C# Redis緩存過期實現延遲通知實戰演練》分享課程中阿笨最后總結的時候說過Redis Pub/Sub是一種并不可靠地消息機制,他不會做信息的存儲,只是在線轉發,那么肯定也沒有ack確認機制,另外只有訂閱段監聽時才會轉發!我們是否有更好的方式去實現呢?今天給大家分享的比較好的解決方案就是通過RabbitMQ的TTL(time to live )和DLX(Dead-Letter-Exchange)來實現延遲任務。

1.1、本次分享課程適合人群如下:

1、有一定的NET開發基礎并對RabbitMQ技術有一定了解和認識。

2、喜歡阿笨的干貨分享課程的童鞋們。

1.2、一句話總結今天我們要學習的目標和成果?

C#如何通過RabbitMQ如何實現延遲隊列功能。

如果您對本次《C#RabbitMQ延遲隊列功能實戰項目演練》分享課程感興趣的話,那么請跟著阿笨一起學習吧。

廢話不多說,直接上干貨,我們不生產干貨,我們只是干貨的搬運工。

二、場景介紹

2.1、什么是延遲隊列?

延遲隊列存儲的對象肯定是對應的延時消息,所謂”延時消息”是指當消息被發送以后,并不想讓消費者立即拿到消息,而是等待指定時間后,消費者才拿到這個消息進行消費。

2.2、使用RabbitMQ實現延遲任務應用場景如下:

場景一:物聯網系統經常會遇到向終端下發命令,如果命令一段時間沒有應答,就需要設置成超時。

場景二:訂單下單之后30分鐘后,如果用戶沒有付錢,則系統自動取消訂單。

阿笨個人理解延遲隊列主要兩類應用場景:“被動延遲”業務場景和“主動延遲”業務場景。

三、思路講解

3.1、實現思路

 生產者輸出消息到Queue1,并且這個消息是設置有有效時間的,比如60s。消息會在Queue1中等待60s,如果沒有消費者收掉的話,它就是被轉發到Queue2,Queue2有消費者,收到,處理延遲任務。

C#中怎么利用RabbitMQ實現一個延遲隊列功能

RabbitMQ延時隊列實現原理圖

3.2、實現方案

方案一:在rabbitmq 3.5.7及以上的版本提供了一個插件(rabbitmq-delayed-message-exchange)來實現延遲隊列功能。同時插件依賴Erlang/OPT 18.0及以上。

方案二:通過RabbitMQ的Time To Live(TTL)和Dead Letter Exchanges(DLX)兩個特性來曲線實現延遲隊列。

實現方案分為兩種,這里阿笨推薦方案二!

四、實現步驟

1)、基于隊列方式實現延遲隊列(消息隊列中所有消息的過期TTL一樣)

通過隊列屬性設置,隊列中所有消息都有相同的過期時間。

2)、基于消息方式實現延遲隊列(消息隊列中單個消息的過期TTL不一樣)

對消息進行單獨設置,每條消息TTL可以不同。

五、課后思考與總結

5.1、思考與總結

需求:用戶在系統中創建一個訂單,如果10s后,用戶沒有進行支付,那么自動取消訂單。

分析:

        1、上面這個情況,我們就適合使用延時隊列來實現,那么延時隊列如何創建

        2、延時隊列可以由 過期消息+死信隊列 來時間

        3、過期消息通過隊列中設置 x-message-ttl 參數實現

        4、死信隊列通過在隊列申明時,給隊列設置 x-dead-letter-exchange 參數,然后另外申明一個隊列綁定x-dead-letter-exchange對應的交換器。

以上就是C#中怎么利用RabbitMQ實現一個延遲隊列功能,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

白山市| 嵊州市| 收藏| 娄烦县| 商南县| 高碑店市| 衡山县| 剑阁县| 邯郸市| 崇仁县| 赣榆县| 巴彦淖尔市| 花莲市| 永靖县| 乡城县| 太康县| 方山县| 青龙| 嘉荫县| 棋牌| 武城县| 顺平县| 吴川市| 苍山县| 迁安市| 淮滨县| 庆云县| 菏泽市| 新营市| 莱州市| 宜宾县| 库伦旗| 珲春市| 常宁市| 牡丹江市| 宁都县| 邹平县| 桐柏县| 衡南县| 讷河市| 凉城县|