rabbit MQ的延遲隊列處理模型示例(基于SpringBoot延時插件實現)

rabbitMQ安裝插件rabbitmq-delayed-message-exchange

交換機由此type 表示組件安裝成功
在這里插入圖片描述

在這里插入圖片描述

生產者發送消息時設置延遲值 消息在交換機滯納至指定延遲后,進入隊列,被消費者消費。

組件注解類:

package com.esint.configs;import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.HashMap;
import java.util.Map;@Configuration
public class DelayedQueueConfig {//交換機public static final String DELAYED_EXCHANGE_NAME = "delayed.exchange";//隊列public static final String DELAYED_QUEUE_NAME = "delayed.queue";//routingKeypublic static final String DELAYED_ROUTING_KEY = "delayed.routingkey";/*** 基于插件聲明一個自定義交換機* @return*/@Beanpublic  CustomExchange delayedExchange(){//String name, String type, boolean durable, boolean autoDelete, Map<String, Object> arguments) {Map<String, Object> arguments = new HashMap<>();arguments.put("x-delayed-type","direct");return new CustomExchange(DELAYED_EXCHANGE_NAME,"x-delayed-message",true, false,arguments);}@Beanpublic Queue delayedQueue(){return QueueBuilder.durable(DELAYED_QUEUE_NAME).build();}@Beanpublic Binding delayedQueueBindingDelayedExchange(@Qualifier("delayedQueue") Queue delayedQueue,@Qualifier("delayedExchange") CustomExchange delayedExchange){return BindingBuilder.bind(delayedQueue).to(delayedExchange).with(DELAYED_ROUTING_KEY).noargs();}
}

生產者代碼實現:

package com.esint.controller;//發送延遲消息import com.esint.configs.DelayedQueueConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.Date;@Slf4j
@RestController
@RequestMapping("/ttl")
public class SendMesController {@Autowiredprivate RabbitTemplate rabbitTemplate;@GetMapping("/sendDelayMsg/{message}/{delayTime}")public void sendMsg(@PathVariable String message,@PathVariable Integer delayTime){log.info("當前時間:{},發送一條ttl為{}ms的消息給延遲交換機轉隊列:{}",new Date().toString(),delayTime,message);rabbitTemplate.convertAndSend(DelayedQueueConfig.DELAYED_EXCHANGE_NAME,DelayedQueueConfig.DELAYED_ROUTING_KEY,message, mes->{mes.getMessageProperties().setDelay(delayTime);return mes;});}}

消費者實現:

package com.esint.consumer;import com.esint.configs.DelayedQueueConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;import java.util.Date;/*** 基于插件的延時消息*/
@Slf4j
@Component
public class DelayQueueConsumer {//監聽消息隊列@RabbitListener(queues = DelayedQueueConfig.DELAYED_QUEUE_NAME)public void receiveDelayQueue(Message message){String msg = new String(message.getBody());log.info("當前時間{} 收到延遲消息:{}",new Date().toString(),msg);}
}

測試:

http://127.0.0.1:19092/ttl/sendDelayMsg/helloDelay1/30000
http://127.0.0.1:19092/ttl/sendDelayMsg/helloDelay2/3000

發送第一條消息:helloDelay1 延遲30s
發送第二條消息:helloDelay2 延遲3s

在這里插入圖片描述

滿足條件。

總結:
阻塞層在交換機。
發送消息靈活設置時間,現達到時間先被消費。
需要安裝延時插件。

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

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

相關文章

OpenAI再次與Altman談判;ChatGPT Voice正式上線

11月22日&#xff0c;金融時報消息&#xff0c;OpenAI迫于超過700名員工聯名信的壓力&#xff0c;再次啟動了與Sam Altman的談判&#xff0c;希望他回歸董事會。 在Sam確定加入微軟后&#xff0c;OpenAI超700名員工簽署了一封聯名信&#xff0c;要求Sam和Greg Brockman&#x…

Java檢測網絡是否正常通訊

Java是一種流行的編程語言&#xff0c;可以用于開發網絡應用程序。在網絡應用程序中&#xff0c;檢測IP地址和端口是否通常是必要的。本文將介紹如何使用Java檢測IP和端口。 Java檢測IP和端口的方法非常簡單。我們可以使用Java的Socket類來實現。下面的代碼片段演示了如何檢測…

用于 syslog 收集的協議:TCP、UDP、RELP

系統日志是從 Linux/Unix 設備和其他網絡設備&#xff08;如交換機、路由器和防火墻&#xff09;生成的日志 可以通過將 syslog 聚合到稱為 syslog 服務器、syslog 守護程序或 syslogd 的服務器來集中 syslog。在TCP、UDP和RELP協議的幫助下&#xff0c;系統日志從設備傳輸到系…

「快學Docker」監控和日志記錄容器的健康和性能

「快學Docker」監控和日志記錄容器的健康和性能 1. 容器健康狀態監控2. 性能監控3. 日志記錄幾種采集架構圖 4. 監控工具和平臺cAdvisor&#xff08;Container Advisor&#xff09;PrometheusGrafana 5. 自動化運維 1. 容器健康狀態監控 方法1&#xff1a;需要實時監測容器的運…

Zero-Shot Restoration of Back-lit Images Using Deep Internal Learning

ABSTRACT 如何恢復背光圖像仍然是一項具有挑戰性的任務。該領域最先進的方法基于監督學習&#xff0c;因此通常僅限于特定的訓練數據。在本文中&#xff0c;我們提出了一種用于背光圖像恢復的“零樣本”方案&#xff0c;該方案利用深度學習的力量&#xff0c;但不依賴于任何先…

孟德爾隨機化 MR入門基礎-簡明教程-工具變量-暴露

孟德爾隨機化&#xff08;MR&#xff09;入門介紹和分章分享&#xff08;暫時不解讀&#xff09; 大家好&#xff0c;孟德爾隨機化大火&#xff0c;但是什么是孟德爾隨機化&#xff0c;具體怎么實操呢 這沒有其他教程的繁冗&#xff0c;我這篇講最基礎的孟德爾隨機化的核心步…

Selenium瀏覽器自動化測試框架

介紹 Selenium [1] 是一個用于Web應用程序測試的工具。Selenium測試直接運行在瀏覽器中&#xff0c;就像真正的用戶在操作一樣。支持的瀏覽器包括IE&#xff08;7, 8, 9, 10, 11&#xff09;&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Google Chrome&#xff…

STM32_3(GPIO)

GPIO簡介 GPIO&#xff08;General Purpose Input Output&#xff09;通用輸入輸出口8種輸入輸出模式輸出模式可控制端口輸出高電平&#xff0c;驅動LED、蜂鳴器、模擬通信協議輸出時許等輸入模式可讀取端口的高低電平或電壓&#xff0c;用于讀取按鍵輸入、外接模塊電平信號輸…

【VRTK】【VR開發】【Unity】8-可交互對象

【概述】 之前我們只是用了一個簡單方塊作為可交互對象。其實可交互對象可以有許多細節設置,包括具體抓握物體的哪個點,指定抓握的方向,指定Secondary Action允許兩手互換抓握,雙手抓握,用兩手改變物體大小等。 【拾取物體】 要讓一個物體能夠被拾取,必須設置它為可互…

mysql解壓版安裝步驟linux

1. MySQL下載就不說了&#xff0c;以5.7版本舉例 2. 解壓安裝包 tar -zxvf mysql-5.7.41-linux-glibc2.12-x86_64.tar.gz 3. 重命名目錄 mv mysql-5.7.41-linux-glibc2.12-x86_64 /usr/local/mysql 4. 創建mysql用戶組和用戶 groupadd mysql useradd -r -g mysql mysql …

十多位老鐵在公司搭建好了測試平臺

保守估計&#xff0c;目前有十多位小伙伴在公司搭建好了。 現在稍微詳細的講一下其中測試計劃的使用說明&#xff1a; &#xff08;圖片有點小&#xff0c;可以點擊擴大查看&#xff09; 1、進入測試計劃模塊&#xff0c;點擊“添加”&#xff0c;如下圖5.1&#xff1a; ▲圖 5…

NX二次開發UF_CAM_set_cam_preferences 函數介紹

文章作者&#xff1a;里海 來源網站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CAM_set_cam_preferences Defined in: uf_cam.h int UF_CAM_set_cam_preferences(UF_CAM_preferences_p_t prefs ) overview 概述 This function sets the current settings of…

PTA-6-44 水果接口-工廠設計模式

用工廠設計模式編寫程序代碼。已知有如下Fruit接口&#xff0c;請編寫其子類Apple類與Orange類&#xff0c;另外再編寫一個Factory工廠類&#xff0c;具體要求如下。 需要編寫Fruit接口的子類&#xff1a; 兩個子類Apple和Orange&#xff0c;實現接口Fruit&#xff0c;并覆寫ea…

若依框架導出下載pdf/excel以及導入打印等

一、打印文件 // 報表打印 handlePdf(row) {wayAPI(row.billcode).then((res) > {var binaryData [];binaryData.push(res);let url window.URL.createObjectURL(new Blob(binaryData, {type: "application/pdf"})); window.open("/static/pdf/web/v…

【鴻蒙應用ArkTS開發系列】- 云開發入門實戰二 實現城市多級聯動Demo(上)

目錄 概述 云數據庫開發 一、創建云數據庫的對象類型。 二、預置數據&#xff08;為對象類型添加數據條目&#xff09;。 三、部署云數據庫 云函數實現業務邏輯 一、創建云函數 二、云函數目錄講解 三、創建resources目錄 四、獲取云端憑據 五、導出之前創建的元數據…

算法設計與分析復習

分支法 算法設計與分析復習–遞歸與分治(一) 算法設計與分析復習–遞歸與分治&#xff08;二&#xff09; 動態規劃 算法設計與分析復習–動態規劃 貪心 算法設計與分析復習–貪心&#xff08;一) 算法設計與分析復習–貪心&#xff08;二&#xff09; 回溯法 算法設計與…

鴻蒙原生應用/元服務開發-AGC分發如何配置版本信息(下)

12.根據《工業和信息化部關于開展移動互聯網應用程序備案工作的通知》&#xff0c;自2023年9月初起&#xff0c;在中國大陸地區提供互聯網信息服務的APP開發者&#xff0c;需要依法履行APP備案手續&#xff0c;并通過APP分發平臺的備案信息核驗。 對于2023年9月7日后在AGC新上…

【C++入門到精通】 Lambda表達式 C++11 [ C++入門 ]

閱讀導航 引言一、C98中的一個例子二、Lambda表達式1. Lambda表達式語法&#xff08;1&#xff09;Lambda表達式各部分說明&#xff08;2&#xff09;捕獲列表說明 三、Lambda表達式的底層原理溫馨提示 引言 當今軟件開發行業的快速發展和日益復雜的需求&#xff0c;要求程序員…

基于openwrt創建應用程序教程

背景 之前在做路由器工作時&#xff0c;搞過一段時間openwrt&#xff0c;最近看到之前寫的筆記。整理一下&#xff0c;希望能幫助一些朋友入坑。 熟悉openwrt openwrt之前并沒有接觸過&#xff0c;其目錄結構和linux也有所不同。先大致了解一下openwrt文件系統中各個目錄的作用…

C運算符與表達式

跟著肯哥&#xff08;不是我&#xff09;學運算符與表達式 運算符 在C語言中&#xff0c;運算符是一種用來執行特定操作的符號或關鍵字。它們用于對變量、常量和表達進行計算、邏輯判斷和位操作等。 定義一般都當耳旁風了 運算符分類 算術運算符 -*/%加減乘除取模&#xff0c;…