成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

RabbitMQ 4.0:大聲說俺中不中

開發(fā) 前端
RabbitMQ 4.0 是一個重要的版本更新,主要包括 AMQP 1.0 支持、流隊列(Stream Queues)支、仲裁隊列改進,去除經(jīng)典隊列的 v1 版本支持。在性能、安全和管理界面等方面進行了多項優(yōu)化與改進。

RabbitMQ 4.0 是一個重要的版本更新,主要包括 AMQP 1.0 支持、流隊列(Stream Queues)支、仲裁隊列改進,去除經(jīng)典隊列的 v1 版本支持。在性能、安全和管理界面等方面進行了多項優(yōu)化與改進。

本文將詳細介紹 RabbitMQ 4.0 后新增以及改進的四種主要隊列類型:

  • 經(jīng)典隊列(Classic Queue)
  • 仲裁隊列(Quorum Queue)
  • 流隊列(Stream Queue)
  • MQTT QoS 0 隊列

什么是 RabbitMQ 隊列?

RabbitMQ 的隊列本質(zhì)上是一個 先進先出(FIFO)的消息緩沖區(qū),用于臨時存儲生產(chǎn)者發(fā)送的消息,并由消費者依次消費。

根據(jù)生命周期和使用方式,RabbitMQ 隊列可以分為以下幾類:

類型

生命周期

是否持久化

持久隊列

永久存在,直到被刪除

? 是

臨時隊列

只在服務運行期間存在

? 否

自動刪除隊列

當最后一個消費者斷開連接后自動刪除

可配置

接下來,我們深入探討每種隊列類型的實現(xiàn)原理和適用場景。

1?? 經(jīng)典隊列(Classic Queue)

基本介紹

經(jīng)典隊列是 RabbitMQ 中的原始隊列類型,它們使用非復制的 FIFO(先進先出)實現(xiàn)。

經(jīng)典隊列有兩種實現(xiàn)(v1 和 v2)。這兩個版本僅在數(shù)據(jù)在磁盤上的存儲和檢索方式上有所不同,但所有功能在兩種實現(xiàn)中均可用。

經(jīng)典隊列用例

經(jīng)典隊列無需復制,非常適合對高可用性和數(shù)據(jù)安全性要求不高的應用。默認隊列類型就是經(jīng)典隊列。

核心功能

  • ? 支持消息和隊列的 TTL(生存時間)
  • ? 支持隊列長度限制
  • ? 支持消息優(yōu)先級和消費者優(yōu)先級
  • ? 支持死信交換(DLX)
  • ? 支持 QoS 預取控制
  • ? 支持獨占隊列


?? 注意:全局 QoS 預取、v1 版本實現(xiàn)將在 RabbitMQ 4.0 被移除。

存儲實現(xiàn)

  • 使用磁盤存儲消息內(nèi)容(消息體)
  • 每個隊列維護一個獨立的索引文件,記錄消息位置
  • v2 版本引入了“每個隊列獨立的小消息存儲”,提升小消息處理效率

?? 適用場景

  • 對高可用性要求不高的任務分發(fā)系統(tǒng)
  • 簡單的微服務通信
  • 不需要數(shù)據(jù)復制的輕量級隊列場景

?? 局限性

  • 缺乏原生復制能力(需依賴鏡像隊列)
  • 鏡像隊列存在性能瓶頸和同步阻塞問題
  • 不支持消息重放

2?? 仲裁隊列(Quorum Queue)

?? 基本介紹

RabbitMQ Quorum Queue 是一種現(xiàn)代隊列類型,它基于 Raft 共識算法實現(xiàn)了持久、復制的 FIFO 隊列。

RabbitMQ 中的 Quorum 隊列旨在實現(xiàn)高可用性和數(shù)據(jù)安全性。它們在多個節(jié)點之間復制數(shù)據(jù),以確保即使某些節(jié)點發(fā)生故障,消息也不會丟失。

仲裁隊列用例

Quorum 隊列非常適合那些不接受數(shù)據(jù)丟失的關(guān)鍵應用。它優(yōu)先考慮容錯能力和數(shù)據(jù)安全,而非 Classic 隊列所具備的最低延遲和高級隊列功能。

核心功能

  • ? 數(shù)據(jù)復制(多節(jié)點同步)
  • ? 持久化存儲(始終啟用)
  • ? 支持死信交換(至少一次投遞)
  • ? 支持毒藥消息(Poison Message)處理
  • ? 更好的故障恢復機制

存儲實現(xiàn)

  • 使用預寫日志(WAL)記錄所有操作
  • 日志條目同時寫入內(nèi)存和磁盤
  • 達到一定大小后寫入段文件并壓縮
  • 所有節(jié)點共享 WAL,保證一致性

適用場景

  • 關(guān)鍵業(yè)務系統(tǒng),如金融交易、訂單處理等
  • 對數(shù)據(jù)一致性、可靠性要求較高的場景
  • 需要自動故障轉(zhuǎn)移和數(shù)據(jù)恢復的環(huán)境

局限性

  • 不支持 TTL、隊列長度限制等高級特性
  • 相比經(jīng)典隊列,延遲略高
  • 不支持非持久或獨占隊列

3?? 流隊列(Stream Queue)

基本介紹

RabbitMQ 中的流隊列是一種持久且可復制的數(shù)據(jù)結(jié)構(gòu),與傳統(tǒng)隊列類似,它緩沖來自生產(chǎn)者的消息,供消費者讀取。流隊列有兩點不同:

  • 生產(chǎn)者如何向他們寫消息
  • 以及消費者如何閱讀他們發(fā)送的消息

Streams 的底層模型是一種不可變的僅追加日志。這意味著寫入 Stream 的消息無法被擦除,只能被讀取。要在 RabbitMQ 中讀取 Stream 中的消息,需要一個或多個消費者訂閱該 Stream,并根據(jù)需要多次讀取同一條消息。

核心功能

  • ? 持久化 + 復制(默認啟用)
  • ? 支持非破壞性讀?。芍貜拖M)
  • ? 高吞吐量(適用于大規(guī)模數(shù)據(jù)流)
  • ? 內(nèi)置惰性行為(消息直接寫入磁盤)
  • ? 支持保留策略(按時間或空間)


? 不支持:

  • TTL 或隊列長度限制
  • 獨占或臨時隊列

存儲實現(xiàn)

  • 使用固定大小的段文件(Segment Files)存儲消息
  • 每個段文件默認大小為 512MB
  • 消息寫入磁盤后建立索引,便于快速查找
  • 支持高效的數(shù)據(jù)壓縮和檢索

適用場景

  • 實時數(shù)據(jù)分析(如日志聚合、監(jiān)控指標)
  • 消息回溯(Replay)需求
  • 高并發(fā)寫入 + 多消費者訂閱的場景
  • 構(gòu)建事件溯源(Event Sourcing)系統(tǒng)

4?? MQTT QoS 0 隊列

基本介紹

RabbitMQ 通過 MQTT 插件支持 MQTT 協(xié)議。默認情況下,MQTT 插件會創(chuàng)建經(jīng)典隊列,也可以配置為創(chuàng)建仲裁隊列。

這些傳統(tǒng)隊列將數(shù)據(jù)寫入磁盤,有時會跨節(jié)點復制數(shù)據(jù),這可能會導致消息流瓶頸。在某些 MQTT 場景中,要求只需將消息發(fā)送給在線訂閱者,而無需持久化和/或復制的開銷。

這就引出了一個問題:我們?nèi)绾尾拍芟@個瓶頸——我們能不能完全不使用隊列?這正是 RabbitMQ 3.12 中引入 MQTT QoS 0 隊列類型的原因。

與經(jīng)典隊列、仲裁隊列和流不同,MQTT QoS 0 隊列類型充當“偽”隊列,這反而消除了底層隊列進程。換句話說,它不作為單獨的 Erlang 進程運行,也不將消息存儲在磁盤上。相反,它使用訂閱客戶端的連接進程郵箱。

這意味著消息將直接發(fā)送到訂閱客戶端的 MQTT 連接進程,繞過傳統(tǒng)的隊列機制,確保立即送達任何“在線”的 MQTT 訂閱者。這種方法顯著降低了延遲和資源占用。

核心功能

  • ? 極低延遲(無隊列中轉(zhuǎn))
  • ? 無需持久化或復制
  • ? 適用于扇出廣播(一對多)場景
  • ? 資源占用極低

存儲實現(xiàn)

  • 不使用磁盤存儲
  • 消息直接發(fā)送給在線訂閱者的連接郵箱
  • 不創(chuàng)建獨立 Erlang 進程

適用場景

  • IoT 設備大規(guī)模廣播通知(如固件更新)
  • 臨時性消息(可接受丟失)
  • 對延遲敏感、但對可靠性要求較低的場景

局限性

  • 不支持離線訂閱者
  • 無法持久化或重放消息
  • 僅適用于 MQTT 協(xié)議

四種隊列類型對比總結(jié)

功能/特性

經(jīng)典隊列

仲裁隊列

流隊列

MQTT QoS 0 隊列

是否持久化

可選

? 默認持久化

? 默認持久化

? 不持久化

是否復制

?(需鏡像)

? Raft 復制

? 分布式復制

?

是否支持重放

?

?

? 支持多次讀取

?

是否支持 TTL

?

?

?

?

是否支持優(yōu)先級

?

?

?

?

吞吐量

中等

中等

? 高吞吐

? 極高(無持久)

適用場景

微服務通信、后臺任務

金融交易、關(guān)鍵系統(tǒng)

實時日志、事件溯源

IoT 廣播、低延遲推送

總結(jié)

如何選擇合適的隊列類型?

你的需求是?

推薦隊列類型

快速部署、簡單易用

? 經(jīng)典隊列

高可用、強一致性

? 仲裁隊列

高吞吐、支持消息重放

? 流隊列

MQTT 場景、低延遲、無需持久化

? MQTT QoS 0 隊列

大規(guī)模廣播、IoT 場景

? MQTT QoS 0 隊列

構(gòu)建事件溯源、實時分析平臺

? 流隊列

對數(shù)據(jù)一致性要求極高

? 仲裁隊列

不需要隊列持久化、追求極致性能

? MQTT QoS 0 隊列


責任編輯:武曉燕 來源: 程序員wayn
相關(guān)推薦

2020-02-19 08:51:28

釘釘網(wǎng)課平臺

2014-09-22 09:27:57

Python

2020-06-02 16:51:24

前端代碼組件

2023-09-11 17:39:35

SSH服務TCP

2023-03-30 14:45:51

工業(yè)4.0物聯(lián)網(wǎng)

2020-03-12 13:00:36

Python斷點設置編程語言

2021-01-11 14:18:56

人工智能技術(shù)

2023-11-29 15:53:45

2022-06-27 10:36:43

工業(yè)4.0人工智能

2009-03-11 10:29:23

代碼契約.NETCLR

2024-04-15 00:00:00

RabbitMQ死信隊列消息

2010-02-01 09:19:32

WF 4.0

2009-08-17 09:30:28

.NET 4.0

2009-12-04 09:14:05

.NET 4.0

2011-08-23 16:22:45

Lua 4.0函數(shù)

2012-11-28 11:17:09

云打印聯(lián)想

2021-11-26 00:05:56

RabbitMQVirtualHostWeb

2024-05-23 12:11:39

2024-09-30 09:48:41

RabbitMQ消息中間件

2009-03-23 10:54:12

.NET契約式編程編程思想
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 中文字幕视频在线观看 | 久久久久一区二区三区 | 亚洲欧美在线观看 | 国产成人免费在线 | 欧美黄色一区 | 国产精品亚洲综合 | 在线免费观看黄色 | 成人国内精品久久久久一区 | 狠狠爱免费视频 | 五月网婷婷 | 99成人在线视频 | 狠狠天天 | 日本三级电影在线观看视频 | 97久久精品午夜一区二区 | 国产精品国产亚洲精品看不卡15 | 欧美一区二区在线 | 成人深夜福利在线观看 | 精品一区在线 | 免费观看毛片 | 中文字幕精 | 97国产精品视频人人做人人爱 | 精品视频一区二区 | 国产精品午夜电影 | 亚洲91精品 | 黄色免费看| 亚洲精品一区二区网址 | 日韩国产中文字幕 | 午夜爽爽爽男女免费观看 | 欧美一区视频 | 精品福利在线 | 99免费在线观看视频 | 成人久久一区 | 六月成人网 | 国产精品一区二区无线 | 精品欧美一区免费观看α√ | 丝袜 亚洲 欧美 日韩 综合 | 国产一区在线视频 | 999热精品 | 亚洲综合一区二区三区 | 亚洲国产二区 | 亚洲综合无码一区二区 |