消息中間件——RabbitMQ(三)理解RabbitMQ核心概念和AMQP協議!

前言

本章學習,我們可以了解到以下知識點:

  • 互聯網大廠為什么選擇RabbitMQ?
  • RabbiMQ的高性能之道是如何做到的?
  • 什么是AMQP高級協議?
  • AMQP核心概念是什么?
  • RabbitMQ整體架構模型是什么樣子的?
  • RabbitMQ消息是如何流轉的?

1. 初識RabbitMQ

RabbitMQ?是一個開源的消息代理和隊列服務器,用來通過普通協議在完全不同的應用之間共享數據(RabbitMQ能夠實現跨語言跨平臺的機制,),RabbitMQ是使用Erlang語言來編寫的,并且RabbitMQ是基于AMQP協議的。

僅僅通過上面一句話,相信大家一定有很多疑惑和問題。

  • RabbitM成熟度到底怎么樣?
  • 業界使用度怎么樣?哪些大廠在使用?為什么?
  • 包括RabbitMQ到底都有哪些特點?
  • RabbitMQ為什么要用Erlang語言去編寫?
  • 什么是AMQP協議?AMQP協議里面的具體的規范又是什么?

我相信大家跟我一樣都會有這樣的疑惑。那么我們一起來學習一RabbitMQ吧。

我們來了解第一個問題。

2. 互聯網大廠為什么選擇RabbitMQ?

業界使用度怎么樣?哪些大廠在使用?為什么?都有哪些優點?
據我了解:滴滴、美團、去哪兒、頭條…

這些互聯網大廠都會采用RabbitMQ作為它底層的消息通信的一個基礎組件。根本原因:

  1. 開源、性能優秀、穩定性保障
  2. 提供可靠性消息投遞模式(confirm)、返回模式(return)
  3. 與SpringAMQP完美的整合、擴展性變得更強、API豐富
  4. 集群模式豐富、表達式配置、HA(高可用)模式、鏡像隊列模型
  5. 保證數據不丟失的前提下做到高可靠性、可用性

3. RabbiMQ的高性能之道是如何做到的?

原因就在于它使用了Erlang語言,Erlang語言最初在于交換機領域的架構模式,這樣使得RabbitQ在Broker之間進行數據交互的性能是非常優秀的。

還有一點也是取決于作者,RabbitMQ開發的作者在開發RabbitMQ之間,先用Erlang語言做了一個簡單的交換機,然后他驚奇的發現:Erlang的優點:Erlang有著和原生Socket一樣好的延遲效果。
相信大家接觸過Socket的朋友,對它的有怎樣的性能有一定的了解。像我們耳熟能詳的RPC通信框架。比如說:dubbo,它底層就是采用了Netty,Netty無非就是網絡編程中的高性能之王,它無非就是一個Socket
基于這個特點呢,我們就有了一個充分的選擇RabbitMQ的理由。其實我們選擇RabbitMQ的時候,有一個主要的考量目標就是:當消息入到RabbtMQ節點上的時候,RabbitMQ的延遲以及響應。

4. 什么是AMQP高級消息隊列協議?

  • AMQP全稱:Advanced Message Queuing Protocol(高級消息隊列協議)

AMQP定義:是具有現代特征的二進制協議。是一個提供統一消息服務的應用層標準高級消息隊列協議,是應用層協議的一個開放標準,為面向消息的中間件設計。

它就類似于Java中的JMS。是比較上層的規范,基于這個規范可以開發出各種各項的消息中間件。

模型分析

Pubilsher application:生產者應用 生產的消息,扔到Server端。

Server:指的就是RabbitMQ的節點

Virtual host:虛擬主機,比較上層的一個路由,類似于路由器這么一個概念。后續介紹

Exchange:交換機,生產者直接將消息投遞到Exchange中。但是要經歷3個過程 -》server->Virtual host->Exchange

先確定將消息發送到哪臺服務器,那么就需要先去建立連接,設置一些地址等等。
第二層,投遞到哪個Virtual host 需要定義。
第三層,投遞到哪個Exchange也需要定義。

再看Consumer application 消費者的應用端,消費端只需要監聽Message Queue,當隊列中有消息的時候,就拿出來消費。因此在Exchange和Message Queue之間有綁定的關系存在,后續詳細介紹。

5. AMQP核心概念是什么?

AMQP核心概念:

  • server: 又稱Broker,接收客戶端的鏈接,實現AMQP實體服務
  • Connection: 鏈接,應用程序與Broker的網絡連接
  • Channel:網絡信道,幾乎所有的操作(數據的讀、寫)都在Channel中進行,Channel是進行消息讀寫的通道。客戶端可建立多個Channel,每個Channel代表一個會話任務。
  • Message:消息,服務器和應用程序之間傳送的數據,由Properties和Body組成。Properties可以對消息進行修飾,比如消息的優先級、延遲等高級特性;Body則就是消息體內容。
  • Virtual host:虛擬地址,用于進行邏輯隔離,最上層的消息路由。一個Virtual host 里面可以有若干個Exchange和Queue,同一個Virtual Host里面不能有相同名稱的Exchange和Queue。一種邏輯概念,類似Redis的邏輯數據庫。用來劃分具體的服務。
  • Exchange:交換機,接收消息,根據路由鍵轉發消息到綁定的隊列
  • Binding:Exchange 和Queue之間的虛擬連接,Binding中可以包含routing key
  • Routing key:一個路由股則,虛擬機可用它來確定如何路由一個特定消息。
  • Queue:也稱為message Queue,消息隊列,保存消息并將它們轉發給消費者。

以上核心概念先有一個大概的認知,以后會詳細介紹。

6. RabbitMQ整體架構模型是什么樣子的?


生產者把消息投遞到Exchange,Exchange投遞到Queue.
因此我們的生產者只需要關注把消息投遞到指定的Exchange即可,我們的消費者只需要監聽指定Queue即可。就是這么簡單的機制。
通過圖我們也能看到,生產者不需要關注投遞到哪個隊列,消費也不需要關注是從哪個Exchange上來的,這兩塊沒有耦合的情況。主要是應為Exchange和Queue有一個綁定的關系。

7. RabbitMQ消息是如何流轉的?

生產者publisher application 生產消息Message投遞到Exchange上,Exchange綁定MessageQueue,可以綁定過多個MessageQueue,為什么三個隊列只有其中一個隊列收到了消息呢?主要是由于Exchange是有一個路由功能的。這個路由就是routing key,這個路由有兩個非常關鍵的點,
第一個:你的消息是需要發送到哪個Exchange。
第二個:你發消息的時候需要帶上routing key,然后通過Exchange 和 MessageQueue 建立一個綁定關系,通過路由key把消息路由到一個指定的隊列上。然后我們的消費端直接監聽隊列就行了,就可以消費了。

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

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

相關文章

P8599 [藍橋杯 2013 省 B] 帶分數(dfs+全排列+斷點判斷)

思路&#xff1a;1.深度枚舉所有排列情況 2.設置為每個排列設置兩個斷點&#xff0c;分為三部分&#xff1a;a,b,c 3.轉換為乘法判斷條件&#xff0c;滿足加一 代碼如下&#xff1a;&#xff08;可用next_permutation全排列函數代替dfs&#xff09; #include<iostream>…

機器學習調參指南:提升模型性能的關鍵步驟

諸神緘默不語-個人CSDN博文目錄 文章目錄 1. 理解模型的參數和超參數2. 使用網格搜索進行超參數調優3. 隨機搜索4. 貝葉斯優化5. 使用交叉驗證避免過擬合6. 考慮正則化7. 調整學習率和其他優化器參數8. 實驗和記錄9. 模型的早停法10. 總結 在機器學習和深度學習的領域中&#x…

全面的日志監控管理工具

企業網絡由眾多日志源組成。集中監控這些日志源有助于防止數據威脅和網絡攻擊&#xff0c;綜合日志監控解決方案可以自動執行日志管理流程&#xff0c;通過關聯日志來識別惡意活動&#xff0c;并幫助滿足IT合規性要求。 不同類型的日志監控 EventLog Analyzer 綜合日志監控解…

智慧法院檔案數字化解決方案

智慧法院檔案數字化解決方案可以采用以下步驟&#xff1a; 1. 確定數字化目標&#xff1a;明確數字化的目標和范圍&#xff0c;比如將所有的案件相關文件、紙質檔案和材料進行數字化。 2. 確定數字化流程&#xff1a;制定數字化的流程和標準&#xff0c;比如采用哪些設備和軟件…

【Linux 文件傳輸系列 1.1 -- rsync 詳細介紹】

文章目錄 rsync 詳細介紹rsync 基本特性rsync 常用選項rsync 各種是使用示例 rsync 詳細介紹 rsync 是一個在 Linux 和 Unix 系統上廣泛使用的文件同步和傳輸工具。它被設計用于快速高效地同步文件和目錄之間的變化&#xff0c;不論是本地還是通過網絡。rsync 命令有許多選項&…

【C語言】qsort函數

目錄 簡介 頭文件 ?編輯 函數原型&#xff1a; 參數函數如何寫&#xff1a; 參數函數要求&#xff1a; qsort對整性數據的排序&#xff1a; qsort對字符型數據的排序&#xff1a; 對結構體類型的內部元素排序&#xff1a; 函數的底層是以快速排序實現的 但是本文不深入…

rxjs中combineLatest的用法

RxJS中的combineLatest操作符可以用于將多個Observable對象合并成一個新的Observable對象&#xff0c;新的Observable對象的值是由原始Observable對象的最新值組成的一個數組。當任何一個原始Observable對象發出新值時&#xff0c;新的Observable對象的值也會更新。 combineLa…

小黑子—Maven高級

Maven高級篇 二 小黑子的Maven高級篇學習1. 分模塊開發1.1 分模塊開發設計1.2 分模塊開發實現1.2.1 抽取domain層1.2.2 抽取dao層 2. 依賴管理2.1 依賴傳遞2.2 可選依賴2.3 排除依賴 3. 繼承與聚合3.1 聚合3.2 繼承3.3 總結 4. 屬性4.1 配置文件加載屬性4.2 版本管理 5. 多環境…

【開源】基于Vue.js的民宿預定管理系統

項目編號&#xff1a; S 058 &#xff0c;文末獲取源碼。 \color{red}{項目編號&#xff1a;S058&#xff0c;文末獲取源碼。} 項目編號&#xff1a;S058&#xff0c;文末獲取源碼。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 用例設計2.2 功能設計2.2.1 租客角色…

夢開始的地方——Adobe Premiere Pro

今天&#xff0c;我們來說說一款老生常談的相信也是很多人都經常迫切需要的軟件。Adobe Premiere Pro&#xff0c;簡稱Pr&#xff0c;是由Adobe公司開發的一款視頻編輯軟件。 Premiere Pro是視頻編輯愛好者和專業人士必不可少的視頻編輯工具。它可以提升您的創作能力和創作自由…

httpd(Web服務器)

名詞解釋 1、URL&#xff1a;Uniform Resource Locator&#xff0c;統?資源定位符 2、?址格式&#xff1a;<協議>://<主機或主機名>[:port]/<?錄資源,路徑> 3、主機地址/主機名&#xff1a;主機地址是服務器在因特?所在的IP地址。主機名就需要域名解析…

裝飾器設計模式是什么?什么是 Decorator 裝飾器設計模式?Python 裝飾器設計模式示例代碼

什么是 Decorator 裝飾器設計模式&#xff1f; 裝飾器模式是一種結構型設計模式&#xff0c;它允許向現有對象動態地添加新功能&#xff0c;同時不改變其結構。這種模式實現了對對象的包裝&#xff0c;稱為裝飾器&#xff0c;并且可以在運行時動態地添加、修改或刪除對象的行為…

重磅!這本30w人都在看的Python數據分析暢銷書:更新了!

想學習python進行數據分析&#xff0c;這本《利用python進行數據分析》是繞不開的一本書。目前該書根據Python3.10已經更新到第三版。 Python 語言極具吸引力。自從 1991 年誕生以來&#xff0c;Python 如今已經成為最受歡迎的解釋型編程語言。 pandas 誕生于2008年。它是由韋…

NX二次開發UF_CAM_set_clear_plane_data 函數介紹

文章作者&#xff1a;里海 來源網站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CAM_set_clear_plane_data Defined in: uf_cam_planes.h int UF_CAM_set_clear_plane_data(tag_t object_tag, double origin [ 3 ] , double normal [ 3 ] ) overview 概述 De…

快慢指針判斷環形鏈表

我們在前面文章中寫過用快慢指針判斷鏈表是否帶環&#xff1a; leetcode&#xff1a;環形鏈表-CSDN博客 我們用的是slow指針一次走一步&#xff0c;fast指針一次走兩步&#xff0c;當slow入環后開始了追擊&#xff0c;每走一次距離縮短1&#xff0c;最終就會相遇 思考問題 …

【LeetCode】每日一題 2023_11_23 HTML 實體解析器(調庫/打工)

文章目錄 刷題前嘮嗑題目&#xff1a;HTML 實體解析器題目描述代碼與解題思路 結語 刷題前嘮嗑 題目&#xff1a;HTML 實體解析器 題目鏈接&#xff1a;1410. HTML 實體解析器 題目描述 代碼與解題思路 func entityParser(s string) (ans string) {return strings.NewRepla…

redo log 丟失或者損壞-ORA-01194: 文件 1 需要更多的恢復來保持一致性

#故障場景描述&#xff1a; 1、current redo 損壞或者丟失 2、ORA-01194: 文件 1 需要更多的恢復來保持一致性 C:\Users\ZMI>sqlplus / as sysdba SQL*Plus: Release 19.0.0.0.0 - Production on 星期三 11月 22 16:58:07 2023 Version 19.3.0.0.0 Copyright (c) 1982, …

NX二次開發UF_CAM_set_lower_limit_plane_tag 函數介紹

文章作者&#xff1a;里海 來源網站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CAM_set_lower_limit_plane_tag Defined in: uf_cam_planes.h int UF_CAM_set_lower_limit_plane_tag(tag_t object_tag, tag_t target_tag ) overview 概述 Set the tag of a …

使用 PowerShell 創建共享目錄

在 Windows 中&#xff0c;可以使用共享目錄來將文件和文件夾共享給其他用戶或計算機。共享目錄可以通過網絡訪問&#xff0c;這使得它們非常適合用于文件共享、協作和遠程訪問。 要使用 PowerShell 創建共享目錄&#xff0c;可以使用 New-SmbShare cmdlet。New-SmbShare cmdl…

TypeScript 項目 Airbnb 語法風格 ESLint 配置

TypeScript 項目 Airbnb 語法風格 ESLint 配置 1. 配置 安裝&#xff1a; npm i -D eslint-config-airbnb-typescript typescript-eslint/eslint-plugin^6.0.0 typescript-eslint/parser^6.0.0配置&#xff1a; .eslintrc.js: module.exports {root: true,env: {node: true…