C++ - 仿 RabbitMQ 實現消息隊列--項目介紹與環境搭建

目錄

項目介紹

開發環境

技術選型

環境搭建?

安裝 wget(一般情況下默認會自帶)

更換國內軟件源

安裝 lrzsz 傳輸工具

安裝編譯器

安裝項目構建工具 make

安裝調試器

安裝 git

安裝 cmake

安裝 Protobuf

安裝 Muduo

安裝 SQLite3

安裝 Gtest


項目介紹

? ? ? ? 首先說一下什么叫做阻塞隊列。阻塞隊列實際上就是一種生產消費模型,生產者生產數據到隊列中,消費者取出數據進行處理。它有很多好處:

????????○ 解耦合 ○ 支持并發 ○ 支持忙閑不均 ○ 削峰填谷

????????而在實際的后端開發中, 尤其是分布式系統里, 跨主機之間使用生產者消費者模型, 也是非常普遍的需求。因此, 我們通常會把阻塞隊列封裝成一個獨立的服務器程序, 并且賦予其更豐富的功能。 這樣的服務程序我們就稱為 消息隊列 (Message Queue, MQ)。市面上成熟的消息隊列非常多:

????????○ RabbitMQ ○ Kafka ○ RocketMQ ○ ActiveMQ

????????其中 RabbitMQ 是一個非常知名、功能強大且廣泛使用的消息隊列。咱們就仿照RabbitMQ 模擬實現一個簡單的消息隊列。

開發環境

  • Linux(Ubuntu-22.04)

  • VSCode

  • g++/gdb?

  • Makefile?

技術選型

  • 開發主語言:C++
  • 序列化框架:Protobuf 二進制序列化
  • 網絡通信:
    • 自定義應用層協議 + 原生 socket: 復雜度較高
    • 自定義應用層協議 + muduo 庫:對 tcp 長連接的封裝、并且使用 epoll 的事件驅動模式,實現高并發服務器與客戶端
  • 源數據信息數據庫: SQLite3
  • 單元測試框架: Gtest

環境搭建?

安裝 wget(一般情況下默認會自帶)

sudo apt-get install wget

更換國內軟件源

????????先備份原來的/etc/apt/source.list 文件

sudo cp /etc/apt/sources.list  /etc/apt/sources.list.bak

????????添加軟件源文件內容,新增以下內容

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
#添加清華源
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse

?????????新增完畢后,更新源

sudo apt-get update

安裝 lrzsz 傳輸工具

sudo apt-get install lrzsz

安裝編譯器

sudo apt-get install gcc g++

安裝項目構建工具 make

sudo apt-get install make

安裝調試器

sudo apt-get install gdb

安裝 git

sudo apt-get install git

安裝 cmake

sudo apt-get install cmake

安裝 Protobuf

# 更新軟件包列表
sudo apt update# 安裝 protobuf 編譯器和運行時庫
sudo apt install protobuf-compiler# 驗證安裝
protoc --version

安裝 Muduo

wget https://gitee.com/hansionz/mq/raw/master/resource/muduo-master.zip
# 安裝依賴環境
sudo apt-get install libz-dev libboost-all-dev
# 運行腳本編譯安裝
unzip muduo-master.zip
./build.sh
./build.sh install

安裝 SQLite3

sudo apt-get install sqlite3 libsqlite3-dev

安裝 Gtest

sudo apt-get install libgtest-dev

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

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

相關文章

《目標檢測模塊實踐手冊:從原理到落地的嘗試與分享》第一期

大家好,歡迎來到《目標檢測模塊實踐手冊》系列的第一篇。從今天開始,我想以一種 “實踐記錄者” 的身份,和大家聊聊在目標檢測任務中那些形形色色的模塊。這些內容沒有權威結論,更多的是我在實際操作中的一些嘗試、發現和踩過的坑…

C++11笑傳之引用

C11前言列表初始化{}進行初始化initializer_list右值引用和移動語義左值與右值左值引用與右值引用引用延長生命周期右值引用和移動語義的使用場景左值引用移動構造和移動賦值右值引用在容器插入的提效引用折疊萬能折疊完美轉發前言 C11是C繼98后的更新,其更新了許多…

瀚高數據庫提交數據后,是否需要COMMIT(APP)

文章目錄環境癥狀問題原因解決方案報錯編碼環境 系統平臺: 版本:5.6.5,4.5 癥狀 瀚高數據庫提交數據后,是否需要commit,瀚高數據庫是否有配置項。 問題原因 瀚高數據庫默認自動COMMIT(提交數據)&#…

深大計算機游戲開發實驗三

主要步驟主角飛船的創建和移動邊界設置以及護盾設置創建敵機自動生成敵機圖層設置彈丸設置武器創建不同發射模式管理競態條件擊敗敵機掉落升級道具不同敵機的生成分值顯示實現退出游戲界面之后進入游戲的最高記錄重置游戲界面失敗后重新加載最記錄不會重置任何時候在游戲界面按…

詳解緩存淘汰策略:LRU

文章目錄緩存淘汰策略LRU核心結構核心操作流程局限性源碼走讀AddGet緩存淘汰策略 緩存淘汰策略的存在是為了解決 緩存容量有限性 和 高緩存命中率 之間的矛盾。其核心目標是在有限的緩存空間內,盡可能提高緩存命中率 緩存容量有限性:緩存(例…

什么是 Bootloader?怎么把它移植到 STM32 上?

一、Bootloader 是啥?它都干了些啥?想象一下你的 MCU(比如 STM32)是一個小機器人,上電之后第一件事,它不會立馬開始“干正事”(運行你的主程序),而是先去運行一個“開場引…

無人機避障——感知篇(Ego_Planner_v2中的滾動窗口實現動態實時感知建圖grid_map ROS節點理解與參數調整影響)

處理器:Orin nx 雙目視覺傳感器:ZED2 實時感知建圖方法:Vins Fusion Raycast (VIO與射線投影法感知定位加建圖方法) 項目地址:https://github.com/ZJU-FAST-Lab/EGO-Planner-v2 【注意】:建…

26-計組-尋址方式

指令尋址與PC自增一、指令尋址方式定義:尋找下一條將要執行的指令地址的過程。 核心部件:程序計數器(PC),用于指示待執行指令的地址。 執行流程:CPU根據PC值從主存取指令。取指后,PC自動自增&am…

生成式對抗網絡(GAN)模型原理概述

生成對抗網絡(Generative Adversarial Network, GAN)是一種通過對抗訓練生成數據的深度學習模型,由生成器(Generator)和判別器(Discriminator)兩部分組成,其核心思想源于博弈論中的零…

Vue和Element的使用

文章目錄1.vue 腳手架創建步驟2.vue項目開發流程3.vue路由4.Element1.vue 腳手架創建步驟 創建一個文件夾 vue雙擊進入文件夾,在路徑上輸入cmd輸入vue ui, 目的:調出圖形化用戶界面點擊創建 9. 10.在vscode中打開 主要目錄介紹 src目錄介紹 vue項目啟動 圖形化界面中沒有npm…

如何設置直播間的觀看門檻,讓直播間安全有效地運行?

文章目錄前言一、直播間觀看門檻有哪幾種形式?二、設置直播間的觀看門檻,對直播的好處是什么三、如何一站式實現上述功能?總結前言 打造一個安全、高效、互動良好的直播間并非易事。面對海量涌入的觀眾,如何有效識別并阻擋潛在的…

【SkyWalking】配置告警規則并通過 Webhook 推送釘釘通知

🧭 本文為 【SkyWalking 系列】第 3 篇 👉 系列導航:點擊跳轉 【SkyWalking】配置告警規則并通過 Webhook 推送釘釘通知 簡介 介紹 SkyWalking 告警機制、告警規則格式以及如何通過 webhook 方式將告警信息發送到釘釘。 引入 服務響應超時…

關于 驗證碼系統 詳解

驗證碼系統的目的是:阻止自動化腳本訪問網頁資源,驗證訪問者是否為真實人類用戶。它通過各種測試(圖像、行為、計算等)判斷請求是否來自機器人。一、驗證碼系統的整體架構驗證碼系統通常由 客戶端 服務端 風控模型 數據采集 四…

微服務集成snail-job分布式定時任務系統實踐

前言 從事開發工作的同學,應該對定時任務的概念并不陌生,就是我們的系統在運行過程中能夠自動執行的一些任務、工作流程,無需人工干預。常見的使用場景包括:數據庫的定時備份、文件系統的定時上傳云端服務、每天早上的業務報表數…

依賴注入的邏輯基于Java語言

對于一個廚師,要做一道菜。傳統的做法是:你需要什么食材,就自己去菜市場買什么。這意味著你必須知道去哪個菜市場、怎么挑選食材、怎么討價還價等等。你不僅要會做菜,還要會買菜,職責變得復雜了。 而依賴注入就像是有一…

skywalking鏡像應用springboot的例子

目錄 1、skywalking-ui連接skywalking-oap服務失敗問題 2、k8s環境 檢查skywalking-oap服務狀態 3、本地iidea啟動服務連接skywalking oap服務 4、基于apache-skywalking-java-agent-9.4.0.tgz構建skywalking-agent鏡像 4.1、Dockerfile內容如下 4.2、AbstractBuilder.M…

3. java 堆和 JVM 內存結構

1. JVM介紹和運行流程-CSDN博客 2. 什么是程序計數器-CSDN博客 3. java 堆和 JVM 內存結構-CSDN博客 4. 虛擬機棧-CSDN博客 5. JVM 的方法區-CSDN博客 6. JVM直接內存-CSDN博客 7. JVM類加載器與雙親委派模型-CSDN博客 8. JVM類裝載的執行過程-CSDN博客 9. JVM垃圾回收…

UnityShader——SSAO

目錄 1.是什么 2.原理 3.各部分解釋 2.1.從屏幕空間到視圖空間 2.2.以法線半球為基,獲取隨機向量 2.3.應用偏移,并將其轉換為uv坐標 2.4.獲取深度 2.5.比較并計算貢獻 2.6.最后計算 4.改進 4.1.平滑過渡 4.2.模糊 5.變量和語句解釋 5.1._D…

【設計模式】外觀模式(門面模式)

外觀模式(Facade Pattern)詳解一、外觀模式簡介 外觀模式(Facade Pattern) 是一種 結構型設計模式,它為一個復雜的子系統提供一個統一的高層接口,使得子系統更容易使用。 外觀模式又稱為門面模式&#xff0…

【6.1.1 漫畫分庫分表】

漫畫分庫分表 “數據量大了不可怕,可怕的是不知道如何優雅地拆分。” 🎭 人物介紹 架構師老王:資深數據庫架構專家,精通各種分庫分表方案Java小明:對分庫分表充滿疑問的開發者ShardingSphere師傅:Apache S…