【從零開始學習RabbitMQ | 第一篇】從異步通信到交換機

目錄

前言

1.什么是RabbitMQ?

2.同步調用的優缺點

3.異步調用的優缺點

3.1優點:

3.2異步調用的問題是什么?

4技術選型

4.1AMQP協議就是:

4.2kafka和RabbitMQ的使用場景

5.安裝RabitMq

6.rabitmq的整體架構?

7.RabibtMQ的快速入門

7.1小結:

8.數據隔離

9.任務模型workqueue

10.Fanout交換機

總結


前言

這是我學習RabbitMQ總結的筆記,RabbitMQ是很強大的消息隊列組件,是學習java路上不可缺少的一部分,越學越覺得自己無知,繼續加油,歡迎大家閱讀本文!!相信閱讀后大家可以對RabbitMQ有簡單的認識

1.什么是RabbitMQ?

RabbitMQ 是一個開源的消息代理軟件(有時也被稱為面向消息的中間件),它實現了高級消息隊列協議(AMQP),在分布式系統中扮演著重要的角色。可以使用mq實現異步通信

2.同步調用的優缺點

  • 優點:
  • 時效性強,等待到結果才會返回

  • 缺點:
  • 可拓展性差,每次都需要修改各個模塊的代碼
  • 性能下降
  • 級聯失敗問題

3.異步調用的優缺點

  1. 異步調用通常是基于消息通知的方式,包含三個角色:
  2. 消息發送者:投遞消息的人,就是原來的調用者
  3. 消息接收者:接收和處理消息的人,就是原來的服務提供者
  4. 消息代理:管理、暫存、轉發消息,你可以把它理解成微信服務器,或者是一個中轉站

  • 消息發送者
  • 消息代理:一般是消息隊列這里使用RabitMQ 就是broker
  • 消息接收者

3.1優點:

  1. 解除耦合,拓展性強
  2. 無需等待,性能好
  3. 故障隔離
  4. 緩存消息,流量削峰填谷(常見的場景就比如抖音賣貨321開始搶單,只有在那一會并發量較大,需要處理的流量多,而其他時候流量卻很少,這時候流量就像山峰和山谷,消息隊列可以實現流量的削峰填谷,實現流量的相對平穩被服務器處理)

3.2異步調用的問題是什么?

  1. 不能立即得到調用結果,時效性差
  2. 不確定下游業務執行是否成功
  3. 業務安全依賴于Broker的可靠性

我們在選擇消息隊列的時候盡量要選擇安全性可靠性高的消息隊列,如果消息隊列一出現問題,那么我們的消息全部丟失,這時候如果是一些支付消息,那就很糟糕了

4技術選型

市場上有許多的消息隊列供我們選擇,這里我們分析各個消息隊列的優缺點

4.1AMQP協議就是

AMQP(Advanced Message Queuing Protocol)協議是一個開放標準的應用層協議,專為在分布式系統中實現可靠的消息傳遞和異步通信而設計。它定義了一套詳細的規范,涵蓋了消息的創建、發布、路由、接收以及確認等各個環節,確保消息能夠在不同的應用程序或系統之間準確無誤地傳輸,并且支持多種消息傳遞模式,如點對點、發布/訂閱等,以滿足不同業務場景的需求。同時,AMQP協議還具有良好的可擴展性和互操作性,允許不同的實現之間進行無縫集成和通信。(也就是不區分編程語言)

  1. 消息隊列就是我們進行異步調用模型的消息代理,broker
  2. kafka的單機吞吐量非常之高,可以達到幾百萬每秒,適合做一些大數據處理
  3. RocketMq單機吞吐量可以達到10w以上
  4. RabbitMQ一般在10w一下

4.2kafka和RabbitMQ的使用場景

可以看一下我之前寫的csdn分析過

點我

支持鏡像集群,可用性高

5.安裝RabitMq

這里使用docker安裝更加方便

之前有寫過docker的安裝教程點我

docker run \-e RABBITMQ_DEFAULT_USER=itheima \    用戶名-e RABBITMQ_DEFAULT_PASS=123321 \   密碼-v mq-plugins:/plugins \   數據卷掛載--name mq \    容器名字--hostname mq \  主機名字-p 15672:15672 \   客戶端端口-p 5672:5672 \     接受信息端口--network hm-net\  網絡-d \rabbitmq:3.8-management

6.rabitmq的整體架構?

這里我們就可以知道消息發送者將消息發送給交換機,然后根據交換機的不同類型,不同策略去將消息發送給我們的隊列,然后再由我們的消費者去消費。

交換機有不同類型目前剛學到Fanout(廣播)

7.RabibtMQ的快速入門

在學習一門技術我們一般可以先去學習如何使用,快速入門,然后根據功能逐步擴展,這里我們選擇快速入門實踐我們的RabbitMQ

rabitmq客戶端的地址。這里是我的虛擬機地址

綁定了兩個隊列

發送消息

rabitMq的客戶端的功能相當全面,我們可以查看我們發送的消息,而不用消費者

7.1小結:

交換機只能進行路由消息無法存儲消息,如果我們沒有給交換機綁定消息隊列,那么我們的消息就會丟失,因此必須進行交換機綁定

8.數據隔離

我們在開發的時候往往希望不同的業務和項目再使用我們的mq服務時候,數據數據是隔離的,因此我們會采取給不同的業務和項目賦予不同的用戶,然后再給用戶賦予不同的虛擬主機,以此來實現數據隔離

9.任務模型workqueue

workqueue:可以加快我們消費者消費的速度,就比如在一些高并發場景下我們可以讓多個消費者去同時監聽一個隊列,可以解決消息堆積問題

可以簡單的去模擬我們的任務模型在java當中

生產者

消費者

默認采取輪詢的策略,為了實現能者多勞,我們可以修改配置,如下

workqueue任務模型

  1. 多個消費者綁定到一個隊列,可以加快消息處理速度
  2. 同一條消息只會被一個消費者處理
  3. 通過設置prefetch來控制消費者預取的消息數量,處理完一條再處理下一條,實現能者多勞

10.Fanout交換機

交換機的作用主要是接收發送者發送的消息,并將消息路由到與其綁定的隊列。

常見交換機的類型有以下三種:

  • Fanout:廣播
  • Direct:定向
  • Topic:話題

fanout交換機是廣播,每一個與其綁定的queue都可以接收消息,所以也叫廣播模式

可以看一下代碼的簡單實現。

消費者

生產者

總結

RabbitMQ 是一款開源的消息代理軟件,實現了 AMQP 協議,在分布式系統異步通信中發揮關鍵作用。與同步調用相比,異步調用借助消息發送者、接收者和 RabbitMQ 這樣的消息代理,雖然犧牲了時效性、難以確定業務執行狀態且依賴代理可靠性,但具備解除耦合、提升性能、隔離故障以及流量削峰填谷等優勢。在技術選型上,RabbitMQ 單機吞吐量一般在 10w 以下,相比 Kafka 的數百萬每秒、RocketMQ 的 10w 以上,更適用于對可用性要求高的場景。通過 Docker 可便捷安裝 RabbitMQ,其架構中交換機負責消息路由,如 Fanout 交換機采用廣播模式將消息分發至所有綁定隊列。使用時,交換機必須綁定隊列以防止消息丟失,還可通過用戶和虛擬主機實現數據隔離;workqueue 任務模型支持多消費者綁定同一隊列加速消息處理,通過設置 prefetch 實現能者多勞 。

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

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

相關文章

Dify MCP實戰 - 郵件發送

安裝MCP sse插件 配置MCP Server 由于Dify 目前還沒有支持stdio方式連接MCP Server。我們找到了Zapier,輕松調用 7000 App 工具。 Zapier配置 ? 訪問 https://actions.zapier.com/settings/mcp/ ? 添加Gmail Send Email工具 ? 授權自己的Gmail郵箱 ? 復制Za…

uniapp 微信小程序使用圖表

使用的是秋云 ucharts 直接在hbuilder插件市場進行下載導入項目中,多端支持 下載地址秋云 ucharts echarts 高性能跨全端圖表組件 - DCloud 插件市場 導入成功后這里就能看到導入的插件啦 導入項目后就可以直接在頁面中通過組件使用了 不需要其余配置 使用簡單 參…

Python數據脫敏技術在大模型機器學習中的深度應用與實踐

一、數據脫敏技術體系詳解 1.1 結構化數據脫敏技術 1.1.1 列級脫敏策略 import pandas as pd from faker import Fakerclass StructuredDataMasker:def __init__(self):self.faker =

【設計模式】GoF設計模式之策略模式(Strategy Pattern)

設計模式之策略模式 Strategy Pattern V1.0核心概念角色代碼示例程序運行結果代碼講解 適用范圍 V1.0 核心概念 策略模式是一種行為型設計模式,其核心思想是業務類執行某個動作時,可以使用該動作的不同的實現,并在程序運行中可以切換使用該…

VS Code配置指南:打造高效的QMK開發環境

VS Code配置指南:打造高效的QMK開發環境 前言 你是否曾為QMK固件開發環境的搭建而頭疼不已?本文將手把手教你使用Visual Studio Code(簡稱VS Code)這款強大的代碼編輯器來構建一個完美的QMK開發環境,讓你的鍵盤固件開…

java CompletableFuture 異步編程工具用法1

1、測試異步調用: static void testCompletableFuture1() throws ExecutionException, InterruptedException {// 1、無返回值的異步任務。異步線程執行RunnableCompletableFuture.runAsync(() -> System.out.println("only you"));// 2、有返回值的異…

中國自動駕駛研發解決方案,第一!

4月28日,IDC《中國汽車云市場(2024下半年)跟蹤》報告發布,2024下半年中國汽車云市場整體規模達到65.1億元人民幣,同比增長27.4%。IDC認為,自動駕駛技術深化與生成式AI的發展將為汽車云打開新的成長天花板,推動云計算在…

如何快速獲取字符串的UTF-8或UTF-16編碼二進制數據?數值轉換成字符串itoa不是C標準?其它類型轉換成字符串?其它類型轉換成數值類型?

目錄 如何快速獲取字符串的UTF-8或UTF-16編碼二進制數據? 數值轉換成字符串itoa不是C標準? 其它類型轉換成字符串 其它類型轉換成數值類型 轉換成數值的API 為什么有的編程語言允許字符串和整數相加? 字符串拼接 字符串字面量自動連接 如何快速獲取字符串…

Android SDK 國內鏡像及配置方法(2025最新,包好使!)

2025最新android sdk下載配置 1、首先你需要有android sdk manager2、 直接上教程修改hosts文件配置域名映射即可(不用FQ)2.1 獲取ping dl.google.com域名ip地址2.2 配置hosts文件域名映射2.3 可以隨意下載你需要的sdk3、 總結:走過彎路,踩過坑!!!大家就不要踩了!避坑1…

MySQL事務隔離機制與并發控制策略

MySQL事務隔離機制與并發控制策略 MySQL事務隔離機制與并發控制策略一、數據庫并發問題全景解析二、事務隔離級別深度解析三、MySQL并發控制核心技術1. 多版本并發控制(MVCC)2. 鎖機制 四、隔離級別實現差異對比五、生產環境最佳實踐六、高級優化技巧七、…

Python `zip()` 函數是什么

Python zip() 函數是什么 在 Python 里,zip() 是一個內置函數,其主要作用是將多個可迭代對象(像列表、元組、字符串等)中的元素一一對應地組合成元組,最終返回一個迭代器,這個迭代器會生成這些元組。 基本語法 zip(*iterables)其中,*iterables 代表可變數量的可迭代對…

Jenkins 改完端口號啟動不起來了

讓我們將 Jenkins 恢復到默認的 8080 端口,確保它能正常啟動: 1. 修改 Jenkins 的配置文件: sudo nano /etc/default/jenkins 將內容修改為: HTTP_PORT8080 JENKINS_ARGS"--webroot/var/cache/jenkins/war --httpPort8080…

【AWS+Wordpress-準備階段】AWS注冊+創建EC2實例

前言 自學筆記,解決問題為主,親測有效,歡迎補充。 本地WP文件部署到AWS整體步驟如下:(本文重點:AWS準備完成) 0. [AWS 準備] 注冊 AWS 并創建 EC2 實例 ↓ 1. [生成安裝包:用 Du…

使用pytorch保存和加載預訓練的模型方法

需要使用到的函數 在 PyTorch 中,torch.save() 和 torch.load() 是用于保存和加載模型的核心函數。 torch.save() 函數 主要用途:將模型或模型的狀態字典(state_dict)保存到文件中。 語法: torch.save(obj, f, pi…

Python從入門到高手8.3節-元組的常用操作方法

目錄 11.3.1 元組的常用操作方法 11.3.2 元組的查找 11.3.3 祈禱明天不再打雷下雨 11.3.1 元組的常用操作方法 元組類型是一種抽象數據類型,抽象數據類型定義了數據類型的操作方法,在本節的內容中,著重介紹元組類型的操作方法。 ? 元組是…

圖書推薦(協同過濾)算法的實現:基于訂單購買實現相似用戶的圖書推薦

代碼部分 package com.ruoyi.system.service.impl;import com.ruoyi.system.domain.Book; import com.ruoyi.system.domain.MyOrder; import com.ruoyi.system.mapper.BookMapper; import com.ruoyi.system.mapper.MyOrderMapper; import com.ruoyi.system.service.IBookRecom…

JMeter快速指南:命令行生成HTML測試報告(附樣例命令解析)

一、核心命令解析 jmeter -g Dash_CapacityTest_01_AllModules_1000.jtl -o report/ 參數 作用 示例文件說明 -g 指定.jtl結果文件路徑 -o 指定報告輸出目錄 自動創建report文件夾 二、操作步驟(Windows/Linux/Mac通用) 進入JMe…

2025年滲透測試面試題總結-滲透崗位全職工作面試(附回答)(題目+回答)

網絡安全領域各種資源,學習文檔,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具,歡迎關注。 目錄 一、通用基礎類問題 1. 自我介紹 2. 職業動機與規劃 3. 加班/出差接受度 二、安全技術類問題 1. 漏…

使用DEEPSEEK快速修改QT創建的GUI

QT的GUI,本質上是使用XML進行描述的,在QT CREATOR的界面編輯處,按CTRL2 切換到代碼視圖,CTRL3切換到編輯器視圖。 CTRL2 切換到代碼視圖 CTRL3 切換到編輯器視圖 鼠標左鍵點擊代碼視圖中,按CTRLA → CTRLC復制XML代碼…

draw.io流程圖使用筆記

文章目錄 圖形較少的問題安裝版好還是非安裝版好業務系統嵌入的draw.io如何導入呢?如何判斷組合和取消組合如何快速選中框里面的內容有時候選不到文本怎么辦連接線如何不走直角 航點和取消航點支持多少種圖形多個連接點?多個圖形對齊雙向箭頭如何畫圖形的大小 其他流程圖圖標…