各大主流中間件對比前端
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是使用Erlang語言來編寫 的,而且RabbitMQ是基於AMQP協議的。centos
滴滴、美團、頭條、去哪兒、藝龍…
開源、性能優秀,穩定性保障
提供可靠性消息投遞模式(confirm)、返回模式(return )
與SpringAMQP完美的整合、API豐富
集羣模式豐富,表達式配置,HA模式,鏡像隊列模型
保證數據不丟失的前提作到高可靠性、可用性api
Erlang語言最初在於交換機領域的架構模式,這樣使得 RabbitMQ在Broker之間進行數據交互的性能是很是優秀的
Erlang的優勢:Erlang有着和原生Socket—樣的延遲安全
AMQP全稱:Advanced Message Queuing Protocol
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,消息隊列,保存消息並將它們轉發給消費者
注意: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
注意獲取鏡像的時候要獲取management版本的,不要獲取last版本的,management版本的才帶有管理界面
1.查詢鏡像
docker search rabbitmq:management
2.獲取鏡像
docker pull rabbitmq:management
3.運行鏡像
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...] (修改節點名稱)