消息中間件RabbitMQ(從入門到精通)

RabbitMQ概念_MQ

image-20220228173506384

消息隊列

MQ全稱Message Queue(消息隊列),是在消息的傳輸過程中保存消息的容器。多用于系統之間的異步通信

  • 同步通信相當于兩個人當面對話,你一言我一語。必須及時回復

image-20220225153135127

  • 異步通信相當于通過第三方轉述對話,可能有消息的延遲,但不需要二人時刻保持聯系。

image-20220225153218847

消息

兩臺計算機間傳送的數據單位。消息可以非常簡單,例如只包含文本字符串;也可以更復雜,可能包含嵌入對象。

隊列

數據結構中概念。在隊列中,數據先進先出,后進后出。

image-20220225154011516

實時效果反饋

1. 消息隊列多用于系統間的

A 同步通信

B 異步通信

C 跨域通信

D 以上說法都不對

2. 在隊列中,數據

A 先進先出,后進后出

B 先進后出

C 后進先出

D 以上說法都不對

答案

1=>B 2=>A

RabbitMQ概念_MQ的優勢

image-20220228173636572

應用解耦

在電商平臺中,用戶下訂單需要調用訂單系統,此時訂單系統還需要調用庫存系統、支付系統、物流系統完成業務。此時會產生兩個問題:

  1. 如果庫存系統出現故障,會造成整個訂單系統崩潰。
  2. 如果需求修改,新增了一個X系統,此時必須修改訂單系統的代碼。

image-20220225160535765

如果在系統中引入MQ,即訂單系統將消息先發送到MQ中,MQ再轉發到其他系統,則會解決以下問題:

  1. 由于訂單系統只發消息給MQ,不直接對接其他系統,如果庫存系統出現故障,不影響整個訂單。
  2. 如果需求修改,新增了一個X系統,此時無需修改訂單系統的代碼,只需修改MQ將消息發送給X系統即可。

image-20220225161145163

異步提速

如果訂單系統同步訪問每個系統,則用戶下單等待時長如下:

image-20220228183806785

如果引入MQ,則用戶下單等待時長如下:

image-20220225162545252

削峰填谷

假設我們的系統每秒只能承載1000請求,如果請求瞬間增多到每秒5000,則會造成系統崩潰。此時引入mq即可解決該問題

image-20220225163312161

使用了MQ之后,限制消費消息的速度為1000,這樣一來,高峰期產生的數據勢必會被積壓在MQ中,高峰就被“削”掉了,但是因為消息積壓,在高峰期過后的一段時間內,消費消息的速度還是會維持在1000,直到消費完積壓的消息,這就叫做“填谷”。

image-20220225163520205

實時效果反饋

1. MQ的優勢是

A 應用解耦

B 異步提速

C 削峰填谷

D 以上說法都正確

答案

1=>D

RabbitMQ概念_MQ的劣勢

image-20220225164119796

  • 系統可用性降低 系統引入的外部依賴越多,系統穩定性越差。一旦MQ宕機,就會對業務造成影響。
  • 系統復雜度提高 MQ的加入大大增加了系統的復雜度,以前系統間是同步的遠程調用,現在是通過MQ進行異步調用。
  • 一致性問題 A系統處理完業務,通過MQ給B、C、D三個系統發消息數據,如果B系統、C系統處理成功,D系統處理失敗,則會造成數據處理的不一致。

實時效果反饋

1. 關于MQ的劣勢,以下說法正確的是

A 會讓系統可用性提高

B 會讓系統可用性降低

C 會讓系統復雜度降低

D 不會產生一致性問題

答案

1=>B

RabbitMQ概念_MQ應用場景

image-20220228174003322

  • 搶紅包、秒殺活動、搶火車票等

    這些業務場景都是短時間內需要處理大量請求,如果直接連接系統處理業務,會耗費大量資源,有可能造成系統癱瘓。

    image-20220228153253283

    而使用MQ后,可以先讓用戶將請求發送到MQ中,MQ會先保存請求消息,不會占用系統資源,且MQ會進行消息排序,先請求的秒殺成功,后請求的秒殺失敗。

    image-20220228153722490

  • 消息分發

    如電商網站要推送促銷信息,該業務耗費時間較多,但對時效性要求不高,可以使用MQ做消息分發。

    image-20220228154223751

  • 數據同步

    假如我們需要將數據保存到數據庫之外,還需要一段時間將數據同步到緩存(如Redis)、搜索引擎(如Elasticsearch)中。此時可以將數據庫的數據作為消息發送到MQ中,并同步到緩存、搜索引擎中。

    image-20220228154913184

  • 異步處理

    在電商系統中,訂單完成后,需要及時的通知子系統(進銷存系統發貨,用戶服務積分,發送短信)進行下一步操作。為了保證訂單系統的高性能,應該直接返回訂單結果,之后讓MQ通知子系統做其他非實時的業務操作。這樣能保證核心業務的高效及時。

    image-20220228155248884

  • 離線處理

    在銀行系統中,如果要查詢近十年的歷史賬單,這是非常耗時的操作。如果發送同步請求,則會花費大量時間等待響應。此時使用MQ發送異步請求,等到查詢出結果后獲取結果即可。

    image-20220228155652047

實時效果反饋

1. 以下業務場景中,可以使用MQ優化的是

A 搶紅包

B 秒殺活動

C 搶火車票

D 以上場景都可以

答案

1=>D

RabbitMQ概念_AMQP

image-20220228174127507

RabbitMQ是由Erlang語言編寫的基于AMQP的MQ產品。

AMQP

即Advanced Message Queuing Protocol(高級消息隊列協議),是一個網絡協議,專門為消息中間件設計。基于此協議的客戶端與消息中間件可傳遞消息,并不受不同中間件產品,不同開發語言等條件的限制。2006年AMQP規范發布,類比HTTP。

AMQP工作過程

生產者(Publisher)將消息發布到交換機(Exchange),交換機根據規則將消息分發給交換機綁定的隊列(Queue),隊列再將消息投遞給訂閱了此隊列的消費者。

image-20220225165352916

實時效果反饋

1. AMQP是為設計的網絡協議

A 緩存

B Web服務器

C 消息中間件

D 數據庫

2. 在AMQP中,將消息分發給隊列

A 虛擬機

B 交換機

C 管道

D 生產者

答案

1=>C 2=>B

RabbitMQ概念_RabbitMQ工作原理

f049a381f4b44024fa211493c088229

  • Producer

    消息的生產者。也是一個向交換機發布消息的客戶端應用程序。

  • Connection

    連接。生產者/消費者和RabbitMQ服務器之間建立的TCP連接。

  • Channel

    信道。是TCP里面的虛擬連接。例如:Connection相當于電纜,Channel相當于獨立光纖束,一條TCP連接中可以創建多條信道,增加連接效率。無論是發布消息、接收消息、訂閱隊列都是通過信道完成的。

  • Broker

    消息隊列服務器實體。即RabbitMQ服務器

  • Virtual host

    虛擬主機。出于多租戶和安全因素設計的,把AMQP的基本組件劃分到一個虛擬的分組中。每個vhost本質上就是一個mini版的RabbitMQ服務器,擁有自己的隊列、交換機、綁定和權限機制。當多個不同的用戶使用同一個RabbitMQ服務器時,可以劃分出多個虛擬主機。RabbitMQ默認的虛擬主機路徑是/

  • Exchange

    交換機。用來接收生產者發送的消息,并根據分發規則,將這些消息分發給服務器中的隊列中。不同的交換機有不同的分發規則。

  • Queue

    消息隊列。用來保存消息直到發送給消費者。它是消息的容器,也是消息的終點。消息一直在隊列里面,等待消費者鏈接到這個隊列將其取走。

  • Binding

    消息隊列和交換機之間的虛擬連接,綁定中包含路由規則,綁定信息保存到交換機的路由表中,作為消息的分發依據。

  • Consumer

    消息的消費者。表示一個從消息隊列中取得消息的客戶端應用程序。

RabbitMQ為什么使用信道而不直接使用TCP連接通信?

TCP連接的創建和銷毀開銷特別大。創建需要3次握手,銷毀需要4次分手。高峰時每秒成千上萬條TCP連接的創建會造成資源巨大的浪費。而且操作系統每秒處理TCP連接數也是有限制的,會造成性能瓶頸。而如果一條線程使用一條信道,一條TCP鏈接可以容納無限的信道,即使每秒成千上萬的請求也不會成為性能的瓶頸。

實時效果反饋

1. 在RabbitMQ中,是消息的生產者

A Publisher

B Consumer

C Connection

D Channel

2. 在RabbitMQ中,發布消息、接收消息是通過完成的

A Broker

B Connection

C Channel

D Exchange

答案

1=>A 2=>C

RabbitMQ安裝_安裝Erlang

RabbitMQ是使用Erlang語言編寫的,所以在安裝RabbitMQ前需要先安裝Erlang環境

  1. 安裝Erlang所需的依賴

    yum install -y epel-release
  2. 添加存儲庫條目

    wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
    rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
  3. 安裝Erlang

    yum install -y erlang
  4. 查看Erlang是否安裝成功

    erl -version

實時效果反饋

1. RabbitMQ是語言編寫的

A Java

B C++

C Erlang

D JavaScript

答案

1=>C

RabbitMQ安裝_安裝RabbitMQ

image-20220308102325898

  1. 為了外部能夠正常訪問RabbitMQ服務,先關閉防火墻

     

    # 關閉運行的防火墻
    systemctl stop firewalld.service
    # 禁止防火墻自啟動
    systemctl disable firewalld.service

  2. RabbitMQ是通過主機名進行訪問的,必須給服務器添加主機名

    # 修改文件
    vim /etc/sysconfig/network
    # 添加如下內容
    NETWORKING=yes
    HOSTNAME=itbaizhan


    # 修改文件
    vim /etc/hosts
    # 添加如下內容
    服務器ip itbaizhan

  3. 使用rz命令上傳RabbitMQ壓縮文件

  4. 安裝RabbitMQ

     

    # 解壓RabbitMQ
    tar xf rabbitmq-server-generic-unix-3.9.13.tar.xz


    # 重命名:
    mv rabbitmq_server-3.9.13 rabbitmq


    # 移動文件夾:
    mv rabbitmq /usr/local/

  5. 配置環境變量

    # 編輯/etc/profile文件
    vim /etc/profile


    #添加如下內容
    export PATH=$PATH:/usr/local/rabbitmq/sbin


    # 運行文件,讓修改內容生效
    source /etc/profile

  6. 開啟管控臺插件

    rabbitmq-plugins enable rabbitmq_management

  7. 后臺運行

     

    #啟動rabbitmq
    rabbitmq-server -detached


    #停止rabbitmq
    rabbitmqctl stop
    ?

  8. 通過管控臺訪問RabbitMQ(15672是rabbitmq的管控臺的port,5672才是他的port)

    路徑:http://ip地址:15672,用戶名:guest,密碼:guest

  9. 此時會提示guest賬戶只允許本地使用,我們可以配置允許使用guest遠程訪問

     

    # 創建配置文件夾
    mkdir -p /usr/local/rabbitmq/etc/rabbitmq
    # 創建配置文件
    vim /usr/local/rabbitmq/etc/rabbitmq/rabbitmq.conf
    # 添加如下內容
    loopback_users=none


    # 重啟RabbitMQ
    rabbitmqctl stop_app
    rabbitmqctl reset
    rabbitmqctl start_app
    ?

RabbitMQ安裝_賬戶管理

image-20220308102440962

guest賬戶默認只允許本地使用,我們可以創建新賬戶遠程訪問RabbitMQ

  1. 創建賬戶

    # 創建賬戶
    rabbitmqctl add_user 用戶名 密碼
  2. 給用戶授予管理員角色

    rabbitmqctl set_user_tags 用戶名 administrator
  3. 給用戶授權

    # "/"表示虛擬機
    # itbaizhan表示用戶名
    # ".*" ".*" ".*" 表示完整權限
    rabbitmqctl set_permissions -p "/" itbaizhan ".*" ".*" ".*"
  4. 通過管控臺訪問rabbitmq

實時效果反饋

1. RabbitMQ新增用戶的命令為

rabbitmqctl user

rabbitmqctl add

rabbitmqctl add_user

rabbitmqctl add_group

2. RabbitMQ默認用戶名是

A admin

B rabbit

C root

D guest

答案

1=>C 2=>D

RabbitMQ安裝_管控臺

image-20220303164759389

image-20220303164855601

實時效果反饋

1. RabbitMQ管控臺默認端口是

A 15672

B 5672

C 3306

D 5601

答案

1=>A

RabbitMQ安裝_Docker安裝

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

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

相關文章

前端學習之后端java小白(五)之多表查詢/事務

一、多表查詢概念二、概述 1. 內連接隱式內連接 SELECT 字段列表 FROM 表1,表2... WHERE 條件顯示內連接SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 條件2. 外連接 左外連接SELECT 列名 FROM 左表 LEFT [OUTER] JOIN 右表 ON 連接條件;右外連接SELECT 列名…

Java全棧學習筆記34

# JDBCjava database connection Java 數據庫連接技術## JDBC 驅動程序如果需要通過jdbc技術連接關系型數據庫,就需要為jdbc提供一個該數據庫的驅動。驅動程序由對應的數據庫廠商提供。mysql提供了針對于各種語言的驅動程序。去官網下載和java相關的驅動即可## JDB…

如何為MySQL中的JSON字段設置索引

背景 MySQL在2015年中發布的5.7.8版本中首次引入了JSON數據類型。自此,它成了一種逃離嚴格列定義的方式,可以存儲各種形狀和大小的JSON文檔,例如審計日志、配置信息、第三方數據包、用戶自定義字段等。 雖然MySQL提供了讀寫JSON數據的函數&am…

【學習日記】

1.上午看了會面經,八股,很多看不懂1.5排查本地mysql服務啟動問題2.刷了兩道題翻轉二叉樹的Dfs和bfs遞歸方法,看了幾分鐘看懂了,一開始刷題,沒有這種感覺,可能思維上升了3.下午做了會ppt4.看了ssm的一個gith…

本地大模型部署指南-Ollama與HuggingFace對比

在本地部署大模型時,用 Ollama 和 Hugging Face (HF) 確實有很大區別,涉及系統、硬件、訓練、推理方式,以及能否查看模型源代碼。下面我分幾個維度說明: 系統和安裝 Ollama 定位是「開箱即用」的本地大模型運行環境。 自帶運行時&…

河北周邊有哪些比較靠譜的智算中心?

河北省通過算力普惠、綠色能源、數據開放、金融支持四大支柱政策,推動智算中心高質量發展。河北及周邊地區的智算中心已形成高可靠性、先進技術和戰略協同的布局。那么,河北周邊有哪些比較靠譜的智算中心?一、河北周邊智算中心盤點?1、尚航懷…

電動汽車充電標準之 — 國標 GB/T 18487《電動汽車傳導充電系統》 簡介

GB/T 18487 的全稱是 《電動汽車傳導充電系統》 ,它是中國電動汽車充電領域最基礎、最核心的國家標準之一。該標準規定了電動汽車傳導充電系統的通用要求、通信協議、安全要求等,是整個中國充電基礎設施建設的基石。 與您之前了解的IEC 61851類似&#x…

溫濕度傳感器如何守護工業制造?

在工業制造、農業養殖、倉儲物流乃至文物保護等領域,環境溫濕度的精確監測是保障品質與安全的關鍵。溫濕度傳感器作為無聲的守護者,如何通過穩定可靠的數據采集,為現代工業生產的精細化與智能化管理提供堅實基礎?本文將深入探討其…

破壁·融合·共贏:杭州大成慧谷基金與涉海科技混改項目公司正式啟航!

2025 年 7 月 15 日,一家融合國企基金實力與民企創新活力的混合所有制項目公司正式誕生——由杭州大成慧谷股權投資基金管理有限公司與山東涉海海洋生物科技有限公司共同出資設立的武創慧聚創芯科學技術(上海)有限公司,當日完成法律合規手續。此前,上海武創大智高新技術集團副總…

洛谷 P1271 【深基9.例1】選舉學生會-普及-

P1271 【深基9.例1】選舉學生會 題目描述 學校正在選舉學生會成員,有 nnn(1≤n≤9991 \le n\le 9991≤n≤999)名候選人,每名候選人編號分別從 111 到 nnn,現在收集到了 mmm(1≤m≤20000001 \le m \le 20000…

【AI】AI 評測入門(二):Prompt 迭代實戰從“能跑通”到“能落地”

“Prompt 不是寫出來的,是測出來的。” ——這是我迭代 5 個版本后,最深的體悟。 上一篇《AI 評測入門(一):先搞懂你的數據集)》,我們講了標簽體系、自測集、評測集、Langfuse 數據結構化——那是 AI 評測的…

【好靶場】SQLMap靶場攻防繞過 (一)

0x00 前言 最近遇到很多在做基礎靶場的小伙伴們都在SQLMap一把索,那么所幸搞一個SQLMap繞過的靶場。 我們是好靶場,一個立志于讓所有學習安全的同學用上好靶場的團隊。 https://github.com/haobachang-1/haobachangBlog/ https://github.com/haobach…

DeepSeek輔助編寫的利用quick_xml把xml轉為csv的rust程序

提示詞請用rust quickxml庫實現讀取xml的row和c標簽信息,并輸出到csv格式,要求是:數值型c,輸出標簽的內容,字符串型c(t “inlineStr”),輸出的內容,row的r屬性表是行號,c的r屬性是字…

logback-spring.xml文件說明

項目里剛好用到&#xff0c;用豆包生成以下說明&#xff0c;此處作為記錄。以下是一個 logback-spring.xml 配置文件示例&#xff0c;結合了 Spring Boot 特性&#xff0c;支持環境區分、日志滾動和不同級別日志輸出&#xff0c;并包含詳細注釋&#xff1a;<?xml version&q…

專題:2025社交媒體營銷與電商融合趨勢報告:抖音、小紅書、短劇、直播全拆解|附210+份報告PDF、數據儀表盤匯總下載

原文鏈接&#xff1a;https://tecdat.cn/?p43853 原文出處&#xff1a;拓端抖音號拓端tecdat 3年前&#xff0c;電商還停留在“貨架擺貨、用戶搜關鍵詞下單”的傳統模式&#xff0c;社交媒體只是品牌“打知名度”的輔助工具&#xff1b;如今&#xff0c;用戶刷抖音直播能直接下…

大模型API密鑰生成規則分析

大模型API密鑰生成規則分析 一、核心生成原則與安全基礎 1.1 密碼學安全隨機數生成 大模型API密鑰的核心安全基礎在于高熵值隨機數生成,需滿足以下技術標準: 熵值要求:至少128位(16字節),推薦256位(32字節),通過密碼學安全偽隨機數生成器(CSPRNG)實現 生成算法:…

太陽光度計在光伏電站的用途

太陽光度計在光伏電站中具有多重關鍵用途&#xff0c;能夠為電站的規劃、運行、維護及能效提升提供科學依據。以下是其具體應用場景及價值分析&#xff1a;1. 太陽能資源評估與電站選址優化核心功能&#xff1a;太陽光度計通過測量直接太陽輻射&#xff08;DNI&#xff09;、散…

ArkTS(方舟 TypeScript)全面介紹:鴻蒙生態的核心編程語言

一、引言 隨著鴻蒙(HarmonyOS)的快速演進,開發者生態成為支撐其發展的關鍵因素。無論是手機、平板、智能穿戴,還是車機、IoT 設備,鴻蒙都希望通過“一次開發,多端部署”的理念,讓開發者能夠更高效地構建應用。 為了實現這一目標,華為推出了 ArkTS(方舟 TypeScript)…

領碼方案|Linux 下 PLT → PDF 轉換服務超級完整版:異步、權限、進度(一氣呵成)

本教程給出可直接落地的 Linux 環境下 PLT→PDF 轉換微服務&#xff0c;全鏈路涵蓋&#xff1a;同步/異步模式、JWTRBAC項目域權限、任務狀態與進度、PDF 水印與審計、可觀測性與彈性伸縮&#xff1b;技術棧為 Spring Boot gpcl6&#xff08;GhostPCL&#xff09; Redis S3/O…

基于51單片機的LCD12864萬年歷時鐘

目錄 具體實現功能 設計介紹 資料內容 全部內容 資料獲取 具體實現功能 具體功能&#xff1a; &#xff08;1&#xff09;LCD12864實時顯示當前時間&#xff08;年月日時分秒星期&#xff09;及溫度值&#xff1b; &#xff08;2&#xff09;四個按鍵可調整當前時間值&…