Java學習第六十九部分——RabbitMQ

目錄

一、前言提要

二、基本信息

1. 關鍵定義 ?

2. 核心角色 ?

3. 交換機類型 ?

三、消息生命周期與可靠性機制

四、生態集成——與Java

五、應用場景

六、性能與選型對比

七、生產級最佳實踐——基于Java

八、應用場景

九、一句話總結


一、前言提要

? ? ? ?Spring AMQP是Spring 框架對 AMQP協議的集成實現,主要用于簡化與RabbitMQ等消息中間件的交互。通過Spring AMQP,開發者能以聲明式方法快速集成RabbitMQ,兼顧靈活性和易用性。

二、基本信息

1. 關鍵定義 ?

? ? ? ?RabbitMQ 是用 Erlang 編寫的開源消息代理,實現了 AMQP 0-9-1 協議,同時通過插件支持 MQTT、STOMP 等協議。

2. 核心角色 ?

? ?? Producer:消息生產者 ?
? ?? Consumer:消息消費者 ?
? ?? Broker:RabbitMQ 服務器節點 ?
? ?? Virtual Host:邏輯隔離單位(類似 MySQL 的 schema) ?
? ?? Exchange:路由器,決定消息如何投放到隊列 ?
? ?? Queue:消息暫存區 ?
? ?? Binding & Routing Key:決定 Exchange→Queue 的映射規則 ?
? ?? Channel:TCP 之上的輕量“會話”,減少連接開銷

3. 交換機類型 ?

? ?? Direct:路由鍵全匹配 ?
? ?? Fanout:廣播到所有綁定隊列 ?
? ?? Topic:模式匹配(* 單層、# 多層) ?
? ?? Headers:基于消息頭 KV 匹配

三、消息生命周期與可靠性機制

1. 發布 → Exchange → 隊列 → 消費 ?
? ?若消息不能路由,mandatory=true 會返還給生產者,false 則丟棄。

2. 可靠性投遞 ?
? ?? 生產者 Confirm(異步 ACK/NACK,支持批量) ?
? ?? 事務通道(txSelect/commit/rollback,同步阻塞,性能低) ?
? ?? 持久化:Exchange、Queue、Message 均支持磁盤持久化 ?
? ?? 消費端 ACK:手動 ACK、自動 ACK、拒絕并重入隊、拒絕并 DLQ

3. 死信隊列(DLQ) ?
? ?觸發條件:消息被拒、TTL 到期、隊列滿。通過 policy 設置 `x-dead-letter-exchange` 與 `x-dead-letter-routing-key` 將死信轉投到 DLQ。

4. TTL & 延遲消息 ?
? ?? 隊列級 TTL:`x-message-ttl` ?
? ?? 消息級 TTL:`expiration` 屬性(單位 ms) ?
? ?? 延遲投遞:官方插件 `rabbitmq_delayed_message_exchange`,利用 `x-delay` 頭實現任意延遲。

四、生態集成——與Java

1. 原生 Java Client ?
? ?核心 API:`ConnectionFactory → Connection → Channel → basicPublish / basicConsume`

2. Spring AMQP / Spring Boot Starter ?
? ?? 只需在 `application.yml` 中配置地址、用戶名、密碼 ?
? ?? 通過 `@RabbitListener` 注解聲明消費端,支持手動 ACK ?
? ?? 配置示例 ?

? ? ?@Beanpublic DirectExchange directExchange() {return new DirectExchange("order.exchange");}@Beanpublic Queue orderQueue() {return QueueBuilder.durable("order.queue").withArgument("x-dead-letter-exchange", "dlx").build();}@Beanpublic Binding binding() {return BindingBuilder.bind(orderQueue()).to(directExchange()).with("order.create");}

? ?? 生產者: ?

? ? ?rabbitTemplate.convertAndSend("order.exchange", "order.create", dto);

? ?? 消費者: ?

@RabbitListener(queues = "order.queue", ackMode = MANUAL)public void onMessage(OrderDto dto, Channel channel, Message message) { ... }

3. 連接池 & 高并發 ?
? ?默認 Spring CachingConnectionFactory 已做 Channel 緩存;若極端高并發,可引入 [rabbitmq-client-metrics] 監控連接泄漏。

五、應用場景

場景用法交換機/特性說明
任務異步化下單 → 庫存扣減Direct解耦系統、流量削峰
秒殺搶購請求先入隊,后臺限流消費Topic + TTL + DLQ過期未支付訂單自動關閉
日志收集應用集群 → ELKFanout一條日志被多個終端同時消費
延遲通知30 min 后發短信Delayed Exchange延遲插件或 TTL+DLQ 實現
微服務事件總線訂單完成事件廣播Topic多服務訂閱感興趣的事件

六、性能與選型對比

維度RabbitMQRocketMQKafka
單機吞吐萬級 ~ 十萬級十萬級 ~ 百萬級百萬級+
消息可靠性
(AMQP 事務/Confirm)

(同步刷盤+主從)
中等
(副本 ISR)
時效性毫秒級毫秒級毫秒級
協議支持AMQP, MQTT, STOMP...自定義協議自定義協議
管理 UI自帶豐富 Web UI豐富輕量
適用場景中小規模事務型業務金融級分布式事務大數據/日志流

七、生產級最佳實踐——基于Java

1. 資源管理 ?
? ?? 一個進程復用一條 TCP Connection,每個線程使用獨立 Channel。 ?
? ?? 消費端務必關閉 autoAck,改為手動 ACK,避免消息丟失。 ?
? ?? 捕獲 ShutdownSignalException,記錄日志并自動重連。

2. 集群與鏡像隊列 ?
? ?? 普通集群:隊列元數據冗余,消息僅駐留單節點 → 高吞吐但有單點風險 ?
? ?? 鏡像隊列(Quorum Queue 新版):消息副本同步到多節點 → 犧牲吞吐換高可用

3. 監控 & 告警 ?
? ?? 指標:connection/channel 數、隊列積壓、磁盤/內存水位、消息速率 ?
? ?? Prometheus + Grafana 官方 exporter;或 Spring Boot Actuator 暴露 `/actuator/rabbitmq`

4. 灰度與版本演進 ?
? ?? 通過 Virtual Host 隔離不同環境(dev/test/prod) ?
? ?? 使用 Policy 而非代碼聲明隊列/交換機,便于運維動態調整參數

5. 冪等與去重 ?
? ?? 每條消息攜帶全局 MessageId ?
? ?? 消費端在業務層利用數據庫唯一鍵或 Redis SETNX 去重

八、最佳實踐

  • RabbitMQ 在 Java 生態中成熟度高、協議完善、管理界面友好,對中小規模系統或需要復雜路由、事務、延遲消息的業務尤為合適。 ?

  • 通過 Spring Boot 的“約定優于配置”能力,可以快速落地;再配合鏡像隊列、DLQ、監控、冪等等手段,即可平滑支撐生產級高可用場景。

九、一句話總結

? ? ? ?RabbitMQ 是 Java 生態里“即插即用”的高可靠消息總線,用 Spring-AMQP 兩行代碼就能完成異步、削峰、延遲與事件驅動。

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

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

相關文章

MDAC2.6問題解決指南:解決.NET Framework數據訪問煩惱

MDAC2.6問題解決指南:解決.NET Framework數據訪問煩惱 【下載地址】MDAC2.6問題解決指南 MDAC 2.6 問題解決指南為您提供了針對.NET Framework數據提供程序要求使用Microsoft Data Access Components (MDAC) 2.6或更高版本的全面解決方案。本指南詳細介紹了如何在開…

會話跟蹤模式

一、圖片講了什么?這張圖片主要講的是“會話跟蹤技術”,也就是網站怎么記住你是誰、你做了什么。1. 什么是會話?會話(Session)就像你和網站的一次聊天,從你打開網頁到關閉網頁,這段時間就是一次…

C語言開發工具Win-TC

如你所知,WIN-TC是一個turbo C2 WINDOWS 平臺開發工具,最大特點是支持中文界面,支持鼠標操作,程序段復制,為初學 c 語言、對高等編程環境不熟悉的同志們非常有幫助。該軟件使用 turbo C2 為內核,提供 WINDO…

lwIP學習記錄5——裸機lwIP工程學習后的總結

1、ping包的TTL生存時間如何修改當我們把工程燒錄到板子上是,我們對板子的IP進行ping包,看到信息如下圖這時候我好奇TTL是什么作用,為什么有的設備是64有的設備是128有的是255?解:TTL(Time to Live&#xf…

利用Trae將原型圖轉換為可執行的html文件,感受AI編程的魅力

1、UI設計原型效果2、通過Tare對話生成的效果圖(5分鐘左右)3、查資料做的效果圖(30分鐘左右))通過以上對比,顯然差別不多能滿足要求,只需要在繼續優化就能搞定; 4、Trae生成的源碼&l…

Chessboard and Queens

題目描述Your task is to place eight queens on a chessboard so that no two queens are attacking each other. As an additional challenge, each square is either free or reserved, and you can only place queens on the free squares. However, the reserved squares …

菜鳥教程R語言一二章閱讀筆記

菜鳥教程R語言一二章閱讀筆記 一.R語言基礎教程 R 語言是為數學研究工作者設計的一種數學編程語言,主要用于統計分析、繪圖、數據挖掘。側重于數學工作者 R語言特點如下: R 語言環境軟件屬于 GNU 開源軟件,兼容性好、使用免費 語法十分有利于…

Tactile-VLA:解鎖視覺-語言-動作模型的物理知識,實現觸覺泛化

25年7月來自清華、中科大和上海交大的論文“Tactile-VLA: Unlocking Vision-Language- Action Model’s Physical Knowledge For Tactile Generalization ”。 視覺-語言-動作 (VLA) 模型已展現出卓越的成就,這得益于其視覺-語言組件豐富的隱性知識。然而&#xff0…

HTML初學者第五天

<1>表格標簽1.1基本語法<table><tr><td>單元格內的文字</td>...</tr>... </table>1.<table></table>是用于定義表格的標簽。2.<tr></tr>標簽用于定義表格中的行&#xff0c;必須嵌套在<table></ta…

FastAPI入門:demo、路徑參數、查詢參數

demo from fastapi import FastAPIapp FastAPI()app.get("/") async def root():return {"message": "Hello World"}在終端運行 fastapi dev main.py結果如下&#xff1a;打開http://127.0.0.1:8000&#xff1a;交互式API文檔&#xff1a;位于h…

pytest中的rerunfailures的插件(失敗重試)

目錄 1-- 安裝rerunfailures插件 2-- rerunfailures的使用 3-- 重試案例 安裝rerunfailures插件 pip install pytest-rerunfailures點擊左下角的控制臺面板 輸入 pip install pytest-rerunfailures 出現上圖的情況就算安裝完成了 rerunfailures的使用 可以添加一下參數使用&…

SpringMVC——建立連接

建立連接 將用戶&#xff08;瀏覽器&#xff09;和java程序連接起來&#xff0c;也就是訪問一個地址能夠調用到我們的Spring程序。在 Spring MVC 中使用 RequestMapping來實現URL 路由映射&#xff0c;也就是瀏覽器連接程序的作用。 1.RequestMapping注解介紹 RequestMapping…

蘑菇云路由器使用教程

1: 手機連接路由器的Wi-Fi&#xff0c;在瀏覽器輸入背面IP地址&#xff1a;192.168.132.1進入路由管理界面1.1: 電腦連接路由器網線在瀏覽器輸入背面IP地址&#xff1a;192.168.132.1進入路由管理界面賬號&#xff1a;admin密碼&#xff1a;123456782:選擇上網模式2.1&#xff…

ubuntu的tar解壓指令相關

1. 指令說明參數作用-xextract&#xff0c;解包-z通過 gzip 解壓&#xff08;.tar.gz、.tgz&#xff09;-vverbose&#xff0c;顯示過程-ffile&#xff0c;后面緊跟壓縮包文件名2. 什么時候用z參數場景是否加 -z結果.tar.gz / .tgz? 必須加 -z正常解壓.tar.gz / .tgz? 沒加 -…

車載診斷刷寫 --- Flash關于擦除和寫入大小

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 簡單,單純,喜歡獨處,獨來獨往,不易合同頻過著接地氣的生活,除了生存溫飽問題之外,沒有什么過多的欲望,表面看起來很高冷,內心熱情,如果你身…

【Verilog HDL 入門教程】 —— 學長帶你學Verilog(基礎篇)

文章目錄一、Verilog HDL 概述1、Verilog HDL 是什么2、Verilog HDL產生的背景3、Verilog HDL 和 VHDL的區別二、Verilog HDL 基礎知識1、Verilog HDL 語言要素1.1、命名規則1.2、注釋符1.3、關鍵字1.4、數值1.4.1、整數及其表示1.4.2、實數及其表示1.4.3、字符串及其表示2、數…

SQL Developer Data Modeler:一款免費跨平臺的數據庫建模工具

SQL Developer Data Modeler 是由 Oracle 公司開發的一款免費的圖形化數據建模和數據庫設計工具&#xff0c;用于創建、瀏覽和編輯邏輯模型、關系模型、物理模型、多維模型和數據類型模型。 SQL Developer Data Modeler 既是一個獨立的應用程序&#xff0c;同時也被集成到了 Or…

CSS面試題及詳細答案140道之(21-40)

《前后端面試題》專欄集合了前后端各個知識模塊的面試題&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

篇四 tcp,udp客戶端服務器編程模型

一 前言 本篇內容主要介紹tcp&#xff0c;udp客戶端服務器編程的基礎API和示例代碼。 二 APIAPI用途使用方socket創建套接字&#xff0c;這是網絡通信的橋梁Tcp,udp客戶端&#xff0c;服務器bind綁定本地IP地址和端口Tcp,udp客戶端&#xff0c;服務器listen監聽端口&#xff0c…

ESP32學習筆記_Components(1)——使用LED Strip組件點亮LED燈帶

LED strip ESP32-S3 的 RMT&#xff08;Remote Control Transceiver&#xff0c;遠程控制收發器&#xff09;外設最初設計用于紅外收發&#xff0c;但由于其數據格式的靈活性&#xff0c;RMT 可以擴展為通用的信號收發器&#xff0c;能夠發送或接收多種類型的信號&#xff1b;…