rabbitmq生產與消費

一、rabbitmq發送消息

一、簡單模式

概述

     一個生產者一個消費者

模型

在這里插入圖片描述

代碼

//沒有交換機,兩個參數為routingKey和消息內容
rabbitTemplate.convertAndSend("test1_Queue","haha");

二、工作隊列模式

概述

  一個生產者,多個消費者,消費者之間負載均衡

模型

在這里插入圖片描述

代碼

	//沒有交換機,兩個參數為routingKey和消息內容rabbitTemplate.convertAndSend("test1_Queue","haha");

三、發布訂閱模式

概述

生產者把消息給交換機,交換機把消息推送給與它綁定的所有隊列,消費者監聽自己的隊列

模型

在這里插入圖片描述

代碼

//該模式下,交換機與隊列綁定無需routingkey,因此效率最高
rabbitTemplate.convertAndSend("fanout_Exchange","","lala");

四、路由模式

概述

交換機與隊列由routing key綁定,生產者發送消息時指定交換機和routing key,則對應的隊列便會收到消息

模型

在這里插入圖片描述

代碼

 rabbitTemplate.convertAndSend("direct_Exchange","test1_Queue","lala");

五、主題模式(通配符模式)

概述

交換機與隊列由routing key綁定,但routing key由通配符和具體的字符組成,生產者輸入具體的字符,交換機根據routing key的規則模糊匹配到對應的隊列,則對應的隊列會收到消息

模型

在這里插入圖片描述

代碼

/*** 交換機與隊列綁定* @return*/
@Bean
Binding truckHistoryBinding(){return BindingBuilder.bind(test1Queue()).to(topicExchange()).with("*.test1.*");
}@GetMapping("/sendMessage")
public void sendMessage() {//需要字符串的模糊匹配,效率最低rabbitTemplate.convertAndSend("topic_Exchange","aa.test1.cc","lala");
}

二、rabbitmq接收消息

一、拉模式

概述

 消費者可以主動拉取隊列里的消息

代碼

rabbitTemplate.execute(channel->{//通過channel.basicGet方法可以單條獲取消息,其返回值時GetReponseGetResponse response =  channel.basicGet("my_queue",false);String message = new String(response.getBody());}
)

二、推模式

概述

通過發布訂閱模式,訂閱隊列里的消息

代碼

 @RabbitListener(queues="my_queue")public void onMessage(Message messge,Channel channel){String msg = new String (message.getBody());}

三、消息的手動確認

注意:

手動確認需要先將自動確認的配置注釋掉;
消息確認模式有:
AcknowledgeMode.NONE:自動確認
AcknowledgeMode.AUTO:根據情況確認
AcknowledgeMode.MANUAL:手動確認
默認情況下消息消費者是自動 ack (確認)消息的,如果要手動 ack(確認)則需要修改確認模式為 manual

spring:rabbitmq:listener:simple:acknowledge-mode: manual

或在 RabbitListenerContainerFactory 中進行開啟手動 ack

@Bean
public RabbitListenerContainerFactory<?> rabbitListenerContainerFactory(ConnectionFactory connectionFactory){SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();factory.setConnectionFactory(connectionFactory);factory.setMessageConverter(new Jackson2JsonMessageConverter());factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);             //開啟手動 ackreturn factory;
}

消費消息手動確認的監聽器

獲取消息消費的唯一標識

message.getMessageProperties().getDeliveryTag();

執行業務處理

消息確認

  //消費消息的手動確認,消息確認成功-basicAck//第一個參數deliveryTag,消息的唯一標識//第二個參數multiple,消息是否支持批量確認,如果是true,代表可以一次性確認標識小于等于當前標識的所有消息//如果是false,只會確認當前消息channel.basicAck(deliveryTag,false);

消息確認失敗處理,根據條件判斷設置是否重回隊列 ,是否支持批量處理

  			//說明消費消息處理失敗,如果不進行確認(自動確認,投遞成功即確認,消費是否正常,不關心),消息就會丟失//消息處理失敗確認,代表消息沒有正確消費,注意:此種方式一次只能確認一個消息//第一給參數是消息的唯一標識,//第二個參數是代表是否重回隊列,如果是true,重新將該消息放入隊列,再次消費//注意:第二個參數要謹慎,必須要結合具體業務場景,根據業務判斷是否需要重回隊列,一旦處理不當,機會導致消息循環入隊,消息擠壓//不重回隊列 require = false
//            channel.basicReject(deliveryTag,false);//重回隊列 require = truechannel.basicReject(deliveryTag,true);//消息處理失敗確認,代表消息沒有正確消費,注意,此種方式支持批量//第一個參數是消息的唯一標識,//第二個參數是代表是否支持批量確認//第三給參數代表是否重回隊列//不重回隊列 require = falsechannel.basicNack(deliveryTag,true,false);//重回隊列 require = truechannel.basicNack(deliveryTag,false,true);

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

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

相關文章

如何將PDF轉換成可以直接編輯的CAD圖紙?

PDF圖紙是為了讓用戶更好的閱覽CAD文件&#xff0c;但是&#xff0c;當我們想要對其進行編輯的時候&#xff0c;PDF圖紙就是一個麻煩了。那么PDF轉換成CAD后可以編輯嗎&#xff1f;如何將PDF轉換成可以直接編輯的CAD圖紙呢&#xff1f;本篇給你答案。 1、啟動迅捷CAD編輯器&…

easyui 列表展示 如何解析 ResponseEntity<Page<Monthlycoefficient>> 這樣的返回結構

在使用 EasyUI 展示列表數據時&#xff0c;通常需要將后端返回的數據解析為 EasyUI 數據網格&#xff08;datagrid&#xff09;所需的格式。假設你的后端返回的是一個 ??ResponseEntity<Page<MonthlyCoefficient>>??? 結構&#xff0c;其中 ??Page??? 是…

【python學習】爬蟲中常使用的urllib和requests庫的的背景、定義、特點、功能、代碼示例以及兩者的區別

引言 urllib是Python標準庫中的一個模塊&#xff0c;它提供了一系列用于操作URL的功能 requests是一個Python第三方庫&#xff0c;由Kenneth Reitz創建&#xff0c;用于簡化HTTP客戶端的編程 一、urllib的定義 urllib可以操作url&#xff0c;主要分為以下幾個子模塊&#xff1…

從人工巡檢到智能防控:智慧油氣田安全生產的新視角

一、背景需求 隨著科技的飛速發展&#xff0c;視頻監控技術已成為各行各業保障安全生產、提升管理效率的重要手段。特別是在油氣田這一特殊領域&#xff0c;由于其工作環境復雜、安全風險高&#xff0c;傳統的監控方式已難以滿足實際需求。因此&#xff0c;基于視頻監控AI智能…

側開知識點合集2

一、try .... catch.. AccessViolationException異常觸發后&#xff0c;下列程序的輸出結果為 static void Main(string[] args) { try { throw new AccessViolationException(); Console.WriteLine("error1"); } catch (Exception e) { Console.WriteLi…

ROS2從入門到精通2-3:機器人3D物理仿真Gazebo與案例分析

目錄 0 專欄介紹1 什么是Gazebo&#xff1f;2 Gazebo架構2.1 Gazebo前后端2.2 Gazebo文件格式2.3 Gazebo環境變量 3 Gazebo安裝與基本界面4 搭建自己的地圖4.1 編輯地圖4.2 保存地圖4.3 加載地圖 5 常見問題 0 專欄介紹 本專欄旨在通過對ROS2的系統學習&#xff0c;掌握ROS2底…

CSS技巧專欄:一日一例 8 - 純CSS利用mask屬性實現按鈕邊框對稱包圍特效

CSS技巧專欄:一日一例 8 - 純CSS利用mask屬性實現按鈕邊框對稱包圍特效 上篇作業解題 在前一篇文章的最后,給各位看官留了一個作業,如上圖所示。本篇文章,我們來公布一下它的源碼。 主要實現的思路 四個漸變色的線段,沿著四個方向的依次運動,(運動在加載前執行)使用 …

均值濾波算法及實現

均值濾波器的使用場景&#xff1a; 均值濾波器使用于處理一些如上述藍色線的高斯噪聲場景 紅色曲線是經過均值濾波處理后的數據。主要因為均值濾波設置數據緩沖區&#xff08;也即延時周期&#xff09;&#xff0c;使得測量值經過緩沖不會出現特別大的變化。 黃色曲線為高斯噪聲…

【iOS】—— 消息傳遞和消息轉發

【iOS】—— 消息傳遞和消息轉發 1. 消息傳遞SEL選擇子IMP快速查找匯編代碼查找過程總結消息轉送快速查找IMP 慢速查找總結消息傳遞慢速查找IMP 2. 消息轉發動態決議動態解析添加方法 快速轉發慢速轉發 總結動態決議消息轉發消息的三次拯救 1. 消息傳遞 在iOS中&#xff0c;消…

一、單例模式

文章目錄 1 基本介紹2 實現方式2.1 餓漢式2.1.1 代碼2.1.2 特性 2.2 懶漢式 ( 線程不安全 )2.2.1 代碼2.2.2 特性 2.3 懶漢式 ( 線程安全 )2.3.1 代碼2.3.2 特性 2.4 雙重檢查2.4.1 代碼2.4.2 特性 2.5 靜態內部類2.5.1 代碼2.5.2 特性 2.6 枚舉2.6.1 代碼2.6.2 特性 3 實現的要…

【樂吾樂2D可視化組態編輯器】快捷鍵

快捷鍵 樂吾樂2D可視化組態編輯器demo&#xff1a;https://2d.le5le.com/ 快捷鍵描述空格 鼠標拖拽移動畫布鼠標右鍵拖拽移動畫布Ctrl 滾輪縮放畫布Ctrl 點擊 Pen多選Ctrl A全選Ctrl C復制Ctrl X剪切Ctrl V粘貼&#xff0c;alt視圖中心粘貼&#xff0c;shift原位粘貼…

查詢優化 -- UNION 用法

union 不返回重復行&#xff08;所有字段值相同的行&#xff09; union all 返回所有行 // 每類最多統計100條 select server_id,count(1) as logs from ( SELECT server_id FROM log WHERE log.type "a" AND server_id1 limit 100 ) UNION select server_id,coun…

谷粒商城-全文檢索-ElasticSearch

1.簡介 一個分布式的開源搜索和分析引擎,可以 秒 級的從海量數據中檢索 主要功能:做數據的檢索和分析(MySQL專攻于數據的持久化存儲與管理CRUD達到百萬以上的數據MSQL就會很慢,海量數據的檢索和分析還是要用ElasticSearch) 用途:我們電商項目里的所有的檢索功能都是由Elasti…

Java中為什么不能直接創建泛型數組

在Java中&#xff0c;不能直接創建泛型數組的主要原因是類型擦除和類型安全問題。 類型擦除 Java中的泛型是通過類型擦除&#xff08;Type Erasure&#xff09;實現的&#xff0c;這意味著在編譯時&#xff0c;泛型類型會被轉換成原始類型&#xff08;如 List<T> 會被轉…

網絡安全-網絡安全及其防護措施9

41.網絡故障排除 網絡故障排除的定義和重要性 網絡故障排除是指通過系統化的方法和工具&#xff0c;識別、診斷和解決網絡中出現的問題&#xff0c;以恢復正常的網絡服務和性能。有效的故障排除可以減少停機時間&#xff0c;提升網絡的穩定性和可靠性。 故障排除的步驟 問題…

基于X86+FPGA+AI數字化醫療設備:全自動尿沉渣檢測儀

助力數字醫療發展&#xff0c;信邁可提供全自動尿沉渣檢測儀專用計算機 隨著信息技術的不斷進步&#xff0c;醫療也進入了一個全新的數字化時代。首先是醫療設備的數字化&#xff0c;大大豐富了醫療信息的內涵和容量&#xff0c;具有廣闊的市場發展前景。 數字化醫療設備&…

使用Redis的SETNX命令實現分布式鎖

什么是分布式鎖 分布式鎖是一種用于在分布式系統中控制多個節點對共享資源進行訪問的機制。在分布式系統中&#xff0c;由于多個節點可能同時訪問和修改同一個資源&#xff0c;因此需要一種方法來確保在任意時刻只有一個節點能夠對資源進行操作&#xff0c;以避免數據不一致或…

白騎士的C++教學高級篇 3.1 文件操作

系列目錄 上一篇&#xff1a;白騎士的C教學進階篇 2.4 標準模板庫&#xff08;STL&#xff09; 文件操作是C編程中的一個重要部分&#xff0c;允許程序與外部存儲設備進行交互&#xff0c;從而實現數據的持久化存儲和讀取。C標準庫提供了豐富的文件操作功能&#xff0c;包括文…

嵌入式香橙派人工智能AI開發板詳細操作與遠程聊天實現

大家好&#xff0c;今天給大分享一個OrangePi AIpro&#xff08;20T&#xff09;采用昇騰作為主控芯片的開發板&#xff0c;開箱以及對應功能的詳細實現。 第一&#xff1a;板子基本介紹 接通電源給對應的開發板上電&#xff0c;觀察其中的現象&#xff0c;如下&#xff1a; 注…

基于HAL庫的stm32的OLED顯示屏顯示(IIC)

OLED OLED&#xff0c;即有機發光二極管( Organic Light Emitting Diode )。OLED由于同時具備自發光&#xff0c;不需背光源、對比度高、厚度薄、視角廣、反應速度快、可用于撓曲性面板、使用溫度范圍廣、構造及制程較簡單等優異之特性&#xff0c;被認為是下一代的平面顯示器…