RabbitMQ入門(簡介和安裝)

一、RabbitMQ簡介

各大主流中間件對比前端

ActiveMQ 是 Apache 出品,最流行的,能力強勁的開源消息總線,而且它一
個徹底支持 J M S(Java Messaging Service) 規範的消息中間件。
其豐富的 API 、多種集羣構建模式使得他成爲業界老牌消息中間件,在中
小型企業中應用普遍!(至關於前端框架的EasyUI)
MQ(Messag Queue消息隊列)衡量指標:服務性能、數據存儲、集羣架構
集羣架構:主節點和備用節點,一對一
在這裏插入圖片描述
Kafka
在開發領域用來作日誌分析,至關於ElementUI(基於Vue所開發的框架-餓了麼)
集羣架構:全部的節點都是同一級別,沒有主節點備用節點的區分,每一個節點都有兩份數據,一個有多個副本,數據仍是共通的。
在這裏插入圖片描述
RocketMQ是阿里開源的消息中間件,目前也已經孵化爲Apache頂級項目,
它是純java開發,具備高吞吐量、高可用性、適合大規模分佈式系統 應用的特色。
RocketMQ思路起源於Kafka,它對消息的可靠傳輸及事務 性作了優化,
目前在阿里集團被普遍應用於交易、充值、流計算、消息推 送、日誌流式處理、binglog分發等場景java

吞吐量:一秒中可以處理多少個消息(調用支付接口進行支付、下單成功發送短信)
性能是最好的,至關於前端框架的bootstrap,要錢
在這裏插入圖片描述node

RabbitMQ是使用Erlang語言開發的開源消息隊列系統,基於AMQP協議 來實現。
AMQP的主要特徵是面向消息、隊列、路由(包括點對點和發佈 /訂閱)、可靠性、安全。AMQP協議更多用在企業系統內,
對數據_致 性、穩定性和可靠性要求很髙的場景,對性能和吞吐量的要求還在其次。docker

至關於前端框架的Layui,還有部分的缺陷,還在持續的更新中編程

在這裏插入圖片描述

結論:
activiMq老牌消息中間件,api全面,可是吞吐量不大
Kafaka吞吐量大,可是數據沒法保證不丟失,主要面向大數據
rokectMQ:吞吐量大,保證數據不丟失,而且支持分佈式事物,可是商業版須要收費
rabbitMQ:吞吐量大,數據不易丟失bootstrap

初識RabbitMQ

RabbitMQ是—個開源的消息代理和隊列服務器,用來經過普通協議 在徹底不一樣的應用之間共享數據,RabbitMQ是使用Erlang語言來編寫 的,而且RabbitMQ是基於AMQP協議的。centos

哪些大廠在用RabbitMQ,爲什幺?

滴滴、美團、頭條、去哪兒、藝龍…
開源、性能優秀,穩定性保障
提供可靠性消息投遞模式(confirm)、返回模式(return )
與SpringAMQP完美的整合、API豐富
集羣模式豐富,表達式配置,HA模式,鏡像隊列模型
保證數據不丟失的前提作到高可靠性、可用性api

RabbitMQ高性能的緣由?

Erlang語言最初在於交換機領域的架構模式,這樣使得 RabbitMQ在Broker之間進行數據交互的性能是很是優秀的
Erlang的優勢:Erlang有着和原生Socket—樣的延遲安全

在這裏插入圖片描述

什麼是AMQP高級消息隊列協議?

AMQP全稱:Advanced Message Queuing Protocol
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;

  • Exchange:交換機,交換消息,根據路由鍵轉發消息到綁定的隊列;

  • Binding:Exchange和Queue之間的虛擬鏈接,binding中能夠包含routing key;

  • Routing key:一個路由規則,虛擬機可用它來肯定如何路由一個特定消息

  • Queue:也稱爲Message Queue,消息隊列,保存消息並將它們轉發給消費者
    在這裏插入圖片描述
    在這裏插入圖片描述

二、RabbitMQ安裝及使用

Centos安裝方式

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

注意:Erlang語言與RabbitMQ安裝版本必須匹配

RabbitMQ安裝與使用
官網地址:https://www.rabbitmq.com/
提早準備:安裝Linux必要依賴包
下載RabbitMQ必須安裝包
配置文件修改
服務的啓動:rabbitmq-server start &
服務的中止:rabbitmqctl stop_app
管理插件:rabbitmq-plugins enable rabbitmq_management
訪問地址:http://ip:15672/

詳細步驟

  • 準備:
yum install \
build-essential openssl openssl-devel unixODBC unixODBC-devel \
make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz -y

在這裏插入圖片描述
在這裏插入圖片描述

  • 分別運行下載:
wget www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm
wget http://repo.iotti.biz/CentOS/7/x86_64/socat-1.7.3.2-5.el7.lux.x86_64.rpm
wget www.rabbitmq.com/releases/rabbitmq-server/v3.6.5/rabbitmq-server-3.6.5-1.noarch.rpm
  • 分別安裝:
rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm 
rpm -ivh socat-1.7.3.2-1.1.el7.x86_64.rpm  --nodeps --force
rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm

配置文件:

vi /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app

好比修改密碼、配置等等,例如:loopback_users 中的 <<「guest」>>,只保留guest
服務啓動和中止:
啓動 rabbitmq-server start &
中止 rabbitmqctl app_stop
查看服務是否成功:

yum install lsof
lsof -i:5672

管理插件:rabbitmq-plugins enable rabbitmq_management
訪問:ip+15672

出現問題在這裏插入圖片描述
解決
主要是由於你的系統太乾淨了,沒有安裝下載命令的控制器,咱們給系統安裝個下載命令器便可,CentOS系統:輸入命令yum -y install wget,wget及其依賴將會被安裝
Debian/Ubuntu系統,須要執行如下命令:
apt-get install -y wget

Docker安裝方式

注意獲取鏡像的時候要獲取management版本的,不要獲取last版本的,management版本的才帶有管理界面
1.查詢鏡像

docker search rabbitmq:management

在這裏插入圖片描述
2.獲取鏡像

docker pull rabbitmq:management

在這裏插入圖片描述
在這裏插入圖片描述
3.運行鏡像

  • 方式一:默認guest用戶,密碼也是guest
docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management
  • 方式二:設置用戶名和密碼
docker run -d \
     --name my-rabbitmq \
     -p 5672:5672 -p 15672:15672 \
     -v /data:/var/lib/rabbitmq \
     --hostname my-rabbitmq-host \
     -e RABBITMQ_DEFAULT_VHOST=my_vhost \
     -e RABBITMQ_DEFAULT_USER=admin \
     -e RABBITMQ_DEFAULT_PASS=admin \
     --restart=always \
     rabbitmq:management

參數說明:
-d:後臺運行容器
-name:指定容器名
-p:指定服務運行的端口(5672:應用訪問端口;15672:控制檯Web端口號)
-v:映射目錄或文件,啓動了一個數據卷容器,數據卷路徑爲:/var/lib/rabbitmq,再將此數據卷映射到住宿主機的/data目錄
–hostname:主機名(RabbitMQ的一個重要注意事項是它根據所謂的 「節點名稱」 存儲數據,默認爲主機名)
-e:指定環境變量;(RABBITMQ_DEFAULT_VHOST:默認虛擬機名;RABBITMQ_DEFAULT_USER:默認的用戶名;RABBITMQ_DEFAULT_PASS:默認用戶名的密碼)
–restart=always:當Docker重啓時,容器能自動啓動
rabbitmq:management:鏡像名

注意:RABBITMQ_DEFAULT_VHOST=my_vhost,my_vhost名字請記好,在以後的編程中要用到,
若是啓動時沒指定,默認值爲/

訪問RabbitMQ控制檯
ip+15672
RabbitMQ服務器端口是5672,控制檯是15672
在這裏插入圖片描述
在這裏插入圖片描述
4.進入RabbitMQ管理平臺進行相關操做
注意1:容器啓動後,能夠經過docker logs 窗口ID/容器名字 查看日誌

docker logs my-rabbitmq

注意2:中止並刪除全部容器

docker stop $(docker ps -aq) && docker rm $(docker ps -aq)

經常使用操做命令
命令行與管控臺-基礎操做

rabbitmqctl stop_app:關閉應用
rabbitmqctl start_app:啓動應用
rabbitmqctl status:節點狀態
rabbitmqctl add_user username password:添加用戶
rabbitmqctl list_users:列出全部用戶
rabbitmqctl delete_user username:刪除用戶
rabbitmqctl clear_permissions -p vhostpath username:清除用戶權限
rabbitmqctl list_user_permissions username:列出用戶權限
rabbitmqctl change_password username newpassword:修改密碼
rabbitmqctl set_permissions -p vhostpath username 「.*」 「.*」 「.*」
rabbitmqctl add_vhost vhostpath:建立虛擬主機
rabbitmqctl list_vhosts:列出全部虛擬主機
rabbitmqctl list_permissions -p vhostpath:列出虛擬主機上全部權限
rabbitmqctl delete_vhost vhostpath:刪除虛擬主機
rabbitmqctl list_queues:查看全部隊列信息
rabbitmqctl -p vhostpath purge_queue blue:清除隊列裏的消息

命令行與管控臺-高級操做

abbitmqctl reset:移除全部數據,要在rabbitmqctl stop_app以後使用
rabbitmqctl join_cluster <clustermode> [--ram]:組成集羣命令
rabbitmqctl cluster_status:查看集羣狀態
rabbitmqctl change_cluster_node_type disc | ram:修改集羣節點的存儲形式
rabbitmqctl forget_cluster_node {--offline} 忘記節點 (摘除節點)
rabbitmqctl rename_cluster_node oldnode1 newnode1 [oldnode2] [newnode2...] (修改節點名稱)
相關文章
相關標籤/搜索