rabbitMQ消息中間件環境配置及原理了解

視頻教程

九年架構師講解php+swoole+rabbitMQ實現異步任務多進程消費_嗶哩嗶哩 (゜-゜)つロ 乾杯~-bilibili

我的官方羣點擊此處

一、Docker 入門

Docker是什麼?

   Docker 是一個開源的應用容器引擎,你可以將其理解爲一個輕量級的虛擬機,開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任 何流行的 Linux 機器上。

爲什麼要使用 Docker?

   作爲一種新興的虛擬化方式,Docker 跟傳統的虛擬化方式相比具有衆多的優勢。

更輕鬆的遷移

   由於 Docker 確保了執行環境的一致性,使得應用的遷移更加容易。Docker 可以在很多平臺上運行,無論是物理機、虛擬機、公有云、私有云,甚至是筆記 本,其運行結果是一致的。因此用戶可以很輕易的將在一個平臺上運行的應用,遷移到另一個平臺上,而不用擔心運行環境的變化導致應用無法正常運行的情況, 從而不會再出現 「這段代碼在我機器上沒問題啊]的現象

更輕鬆的維護和擴展

   Docker 使用的分層存儲以及鏡像的技術,使得應用重複部分的複用更爲容易,也使得應用的維護更新更加簡單,基於基礎鏡像進一步擴展鏡像也變得非常簡 單。此外,Docker 團隊同各個開源項目團隊一起維護了一大批高質量的 官方鏡像,既可以直接在生產環境使用,又可以作爲基礎進一步定製,大大的降低了應 用服務的鏡像製作成本。

更快速的啓動時間

   傳統的虛擬機技術啓動應用服務往往需要數分鐘,而 Docker 容器應用,由於直接運行於宿主內核,無需啓動完整的操作系統,因此可以做到秒級、甚至毫秒 級的啓動時間。大大的節約了開發、測試、部署的時間。

更高效的利用系統資源

   由於容器不需要進行硬件虛擬以及運行完整操作系統等額外開銷,Docker 對系統資源的利用率更高。 無論是應用執行速度、內存損耗或者文件存儲速度,都要比傳統虛擬機技術更高效。因此,相比虛擬機技術,一個相同配置的主機,往往可以運行更多數量的應 用。

對比傳統虛擬機總結

Docker 的主要用途,目前有三大類。

(1)提供一次性的環境。比如,本地測試他人的軟件、持續集成的時候提供單元測試和構建的環境。

(2)提供彈性的雲服務。因爲 Docker 容器可以隨開隨關,很適合動態擴容和縮容。

(3)組建微服務架構。通過多個容器,一臺機器可以跑多個服務,因此在本機就可以模擬出微服務架構。

 

1.1 Centos 安裝docker

1、更新update到最新的版本

 yum  update

2、卸載老版本docker

yum  remove docker  docker-common docker-selinux  docker-engine

3、安裝需要的軟件依賴包

 yum install -y yum-utils  device-mapper-persistent-data lvm2

4、設置yum源

 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

5、查看docker版本

yum list docker-ce --showduplicates|sort -r  

6、安裝docker

 yum  install  docker-ce-18.03.1.ce -y

7、啓動docker

 systemctl start docker

8、加入開機自啓

 systemctl enable docker

9、配置國內鏡像加速

 vi /etc/docker/daemon.json  {  "registry-mirrors": ["http://hub-mirror.c.163.com"] }

 

1.2 docker基本概念

Docker 包括三個基本概念:

鏡像(Image) 容器(Container) 倉庫(Repository)

 

Docker 鏡像就是一個只讀的模板。

  • 例如:一個鏡像可以包含一個完整的 ubuntu 操作系統環境,裏面僅安裝了 Apache 或用戶需要的其它應用程序。鏡像可以用來創建 Docker 容器。
  • Docker 提供了一個很簡單的機制來創建鏡像或者更新現有的鏡像,用戶甚至可以直接從其他人那裏下載一個已經做好的鏡像來直接使用

二、docker服務端及客戶端安裝

2.1、docker服務端安裝

代碼如下:

通過docker run 運行的時候會自動到倉庫搜索

 docker run -d --name rabbit -p 15672:15672 -p 5672:5672  rabbitmq:management

 

參數說明:

-d 開啓守護進程,程序後臺運行
-p 15672:15672 : 將主機的15672端口,映射到容器的15672端口,用於外網訪問到容器
--name rabbit : 容器名字
通過當前命令,查看容器是否啓動,環境是否安裝完畢
docker ps -a  

2.2、docker客戶端安裝

安裝 rabbitmq-c,C 與 RabbitMQ 通信需要依賴 rabbitmq-c 庫(librabbitmq),具體請看https://github.com/alanxz/rabbitmq-c

1、通過git或者wget等方式下載

 git clone git://github.com/alanxz/rabbitmq-c.git
 
 cd rabbitmq-c
 
 cmake -DCMAKE_INSTALL_PREFIX=/usr/local/rabbitmq
 
 cmake --build . --target install

注意路徑指定,下載amqp擴展時需要指定路徑,同時需要修改安裝路徑下的lib64爲lib,否則php擴展載入的時候找不到擴展

2、接下來就是安裝 php amqp 的擴展了

可以通過源碼編譯安裝

wget http://pecl.php.net/get/amqp-1.8.0.tgz tar zxvf amqp-1.8.0.tgz cd amqp-1.8.0 /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config --with-amqp  --with-librabbitmq-dir=/usr/local/rabbitmq make && make install
必須指定好 rabbitmq-c文件的安裝路徑纔行,也就是上面安裝的時候的路徑
最後將'extension=amqp.so'加入 php.ini

三、AMQP協議的認識

 RabbitMQ Server:也叫broker server,它是一種傳輸服務。 他的角色就是維護一條從Producer到Consumer的路線,保證數據能夠按照指定的方式進行傳輸。

  • Producer: 消息生產者,如圖A、B、C,數據的發送方。消息生產者連接RabbitMQ服務器然後將消息投遞到Exchange。
  • Consumer:消息消費者,如圖1、2、3,數據的接收方。消息消費者訂閱隊列,RabbitMQ將Queue中的消息發送到消息消費者。
  • Exchange:生產者將消息發送到Exchange(交換器),由Exchange將消息路由到一個或多個Queue中(或者丟棄)。Exchange並不存儲消息。RabbitMQ中的Exchange有fanout、direct、topic、headers四種類型,每種類型對應不同的路由規則,後面詳細介紹這四種類型。
  • Queue:(隊列)是RabbitMQ的內部對象,用於存儲消息。消息消費者就是通過訂閱隊列來獲取消息的,RabbitMQ中的消息都只能存儲在Queue中,生產 者生產消息並最終投遞到Queue中,消費者可以從Queue中獲取消息並消費。多個消費者可以訂閱同一個Queue,這時Queue中的消息會被平均分攤給多個 消費者進行處理,而不是每個消費者都收到所有的消息並處理。
  • RoutingKey:生產者在將消息發送給Exchange的時候,一般會指定一個routing key,來指定這個消息的路由規則,而這個routing key需要與Exchange Type 及binding key聯合使用才能最終生效。在Exchange Type與binding key固定的情況下(在正常使用時一般這些內容都是固定配置好的),我們的生產者就可 以在發送消息給Exchange時,通過指定routing key來決定消息流向哪裏。RabbitMQ爲routing key設定的長度限制爲255 bytes。
  • Connection:(連接)Producer和Consumer都是通過TCP連接到RabbitMQ Server的。以後我們可以看到,程序的起始處就是建立這個TCP連接。
  • Channels:(信道)它建立在上述的TCP連接中。數據流動都是在Channel中進行的。也就是說,一般情況是程序起始建立TCP連接,第二步就是建立這個 Channel。

推薦教程

基礎:

手把手教你寫留言板系統av78744637

HTML+PHP+Mysql實現網站註冊登錄av78785761

php從零教學支付技術大通關Av78773453

零基礎小白兩小時入門PHP基礎語法av81031138

兩小時熟練PHP基礎語法八大數據類型av81050275

PHP黃金搭檔mysql數據庫兩小時基礎入門av81142395

PHP微信掃碼支付從入門到實戰av83815575

PHP微信支付從入門到實戰教程av83707632

教你如何用laravel開發支付寶接口av77424057

php擴展開發:

PHP擴展開發——cookie與session原理實戰av83825917

php擴展開發——驗證碼開發av83864077

 

tp:

TP5開發大型ERP核心系統Auth認證組件av80969844

女神老師講解thinkphp6支付大通關av79763622

 

redis:

redis從入門到精通實戰教程av83679805

9年架構師教你用redis實現高併發限流av94478592

9年架構師教你用redis實現高併發秒殺av94926372

9年架構師講解redis高併發秒殺解決方案av95010886
 

 

swoole:

PHP—swoole通往大神修煉之路:av77924246

手把手教你用swoole+websocket實現戶外監控直播(總集篇):av79087951

教你用swoole開發網絡遊戲:av79264440

PHP高級技術手寫swoole分佈式框架:av78383962

PHP高級技術手寫swoole分佈式框架(二):av78632435

PHP高級技術手寫swoole分佈式框架(三):av78748923

PHP高級技術手寫swoole分佈式框架(框架優化):av78856427

PHP高級技術手寫swoole分佈式框架(分佈式RPC):av79012272

用swoole實現消息推送:av79874641

swoole+docker+redis主從複製及讀寫分離av78781841

加薪、漲分利器-Swoole-Go協程+Mysql8.0實現高性能數據庫連接池:av93991412

 

更多學習內容請訪問:

八重櫻:怎麼從一名碼農成爲架構師的必看知識點:目錄大全(不定期更新)​zhuanlan.zhihu.com圖標

以上內容希望幫助到大家,很多PHPer在進階的時候總會遇到一些問題和瓶頸,業務代碼寫多了沒有方向感,不知道該從那裏入手去提升,對此我整理了一些資料,包括但不限於:分佈式架構、高可擴展、高性能、高併發、服務器性能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell腳本、Docker、微服務、Nginx等多個知識點高級進階乾貨需要的可以免費分享給大家,需要的可以加入我的官方羣點擊此處

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章