網站首頁 編程語言 正文
歷史:
Message Queue的需求由來已久,80年代最早在金融交易中,高盛等公司采用Teknekron公司的產品,當時的Message queuing軟件叫做:the information bus(TIB)。 TIB被電信和通訊公司采用,路透社收購了Teknekron公司。之后,IBM開發了MQSeries,微軟開發了Microsoft Message Queue(MSMQ)。這些商業MQ供應商的問題是廠商鎖定,價格高昂。2001年,Java Message queuing試圖解決鎖定和交互性的問題,但對應用來說反而更加麻煩了。
于是2004年,摩根大通和iMatrix開始著手Advanced Message Queuing Protocol (AMQP)開放標準的開發。2006年,AMQP規范發布。2007年,Rabbit技術公司基于AMQP標準開發的RabbitMQ 1.0 發布。
基本概念
AMQP基本模型如下圖所示:????
Broker:
接收和分發消息的應用,如RabbitMQ Server就是Message Broker。
Virtual host:
出于多租戶和安全因素設計的,把AMQP的基本組件劃分到一個虛擬的分組中,類似于網絡中的namespace概念。
Exchange
交換器是消息送達的實體。他是具名的,它是消息的第一站。系統根據分發規則,匹配查詢表中的routing key,分發消息到queue中去。
屬性:
durable:該交換器將在broker重啟后生效。
auto-delete:該交換器將在沒有消息隊列綁定時自動刪除。一個從未綁定任何隊列的交換器不會自動刪除。
類型:
direct (point-to-point)
fanout (multicast)
topic (publish-subscribe)
Queue
隊列是接收消息的實體,具有名字和屬性,但沒有類型。客戶端可以訂閱隊列以便使broker遞送某消息隊列的內容到該客戶端。
屬性:
alternate-exchange :當消息被訂閱者拒絕或者由于隊列被刪除而孤立時則被送往此交換器,同時隊列中的該消息被刪除。
passive :當隊列不存在時會拋出一個錯誤信息,仍然不會被聲明。
durable :隊列將在broker重啟時啟動。
exclusive :隊列僅服務于一個客戶端。
auto-delete :隊列在沒有活躍訂閱者的時候將自動刪除。當客戶端終結時,exclusive類型的隊列則一定會自動刪除。
Binding
綁定是隊列和交換器之間的關系,規定消息如何由交換器到隊列。綁定的屬性被交換器用來與路由算法匹配。
當一個消息的路由關鍵字與綁定中的模式匹配時,交換器會把該消息的拷貝送達隊列。如何進行匹配僅依賴于交換器的類型:
direct型 :消息的路由關鍵字與綁定相同。
fanout型 :總是匹配,即使綁定無關鍵字。
topic型 :匹配路由關鍵字屬性,字符串的各個部分以'.'分隔。可包含兩個特殊字符:'*'表示單個任意詞,'#'表示0個或多個詞,例如 *.stock.# 匹配usd.stock和eur.stock.db,但不匹配stock.nasdaq。
headers型 :匹配各個鍵-值對的邏輯組合結果。
Connection:
publisher/consumer和broker之間的TCP連接。斷開連接的操作只會在client端進行,Broker不會斷開連接,除非出現網絡故障或broker服務出現問題。
Channel:
如果每一次訪問RabbitMQ都建立一個Connection,在消息量大的時候建立TCP Connection的開銷將是巨大的,效率也較低。
Channel是在connection內部建立的邏輯連接,如果應用程序支持多線程,通常每個thread創建單獨的channel進行通訊,AMQP method包含了channel id幫助客戶端和message broker識別channel,所以channel之間是完全隔離的。Channel作為輕量級的Connection極大減少了操作系統建立TCP connection的開銷。
原文鏈接:https://www.cnblogs.com/TianFang/p/10119776.html
相關推薦
- 2022-01-05 npm install 報錯:npm ERR! code EPERM npm ERR! syscal
- 2022-06-04 Android自定義ScrollView實現阻尼回彈_Android
- 2022-02-13 Flutter在showModalBottomSheet中使用StatefulWidget
- 2022-06-16 Linux系統下Go語言開發環境搭建_Golang
- 2022-11-07 python中openpyxl庫用法詳解_python
- 2021-11-06 C/C++?Qt?StringListModel?字符串列表映射組件詳解_C 語言
- 2023-01-23 Kotlin泛型的型變之路演變示例詳解_Android
- 2021-11-27 關于UDP服務器客戶端編程流程介紹_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支