MQ的引言|不同MQ的特点|RabbitMQ安装
目錄
- MQ引言
- 什么是MQ
- MQ有哪些
- 不同MQ的特點
- RabbitMQ引言
- 安裝
- Windows 安裝
- 使用
- 訪問 RabbitMQ 主頁
- Linux 安裝
MQ引言
什么是MQ
MQ(Message Queue)消息隊列,是基礎數據結構中“先進先出”的一種數據結構。一般用來解決應用解耦,異步消息,流量削峰等問題,實現高性能,高可用,可伸縮和最終一致性架構。
通過典型的生產者和消費者模型, 生產者不斷向消息隊列中生產消息, 消費者不斷從隊列中獲取消息. 因為消息的生產和消費都是異步的, 而且只關心消息的發送和接受, 沒有業務邏輯的侵入, 輕松的實現系統間解耦. 別名 消息中間件 通過利用高可用的消息傳遞機制進行平臺的數據交流, 并基于數據通信來進行分布式系統的集成.
MQ有哪些
ActiveMQ、RabbitMQ、RocketMQ、Kafka
不同MQ的特點
- ActiveMQ
單機吞吐量:萬級
topic數量都吞吐量的影響:
時效性:ms級
可用性:高,基于主從架構實現高可用性
消息可靠性:有較低的概率丟失數據
功能支持:MQ領域的功能極其完備
總結:
非常成熟,功能強大,在早些年業內大量的公司以及項目中都有應用
偶爾會有較低概率丟失消息
現在社區以及國內應用都越來越少,官方社區現在對ActiveMQ 5.x維護越來越少,幾個月才發布一個版本
主要是基于解耦和異步來用的,較少在大規模吞吐的場景中使用
- RabbitMQ
單機吞吐量:萬級
topic數量都吞吐量的影響:
時效性:微秒級,延時低是一大特點。
可用性:高,基于主從架構實現高可用性
消息可靠性:
功能支持:基于erlang開發,所以并發能力很強,性能極其好,延時很低
總結:
erlang語言開發,性能極其好,延時很低;
吞吐量到萬級,MQ功能比較完備
開源提供的管理界面非常棒,用起來很好用
社區相對比較活躍,幾乎每個月都發布幾個版本分
在國內一些互聯網公司近幾年用rabbitmq也比較多一些 但是問題也是顯而易見的,RabbitMQ確實吞吐量會低一些,這是因為他做的實現機制比較重。
erlang開發,很難去看懂源碼,基本職能依賴于開源社區的快速維護和修復bug。
rabbitmq集群動態擴展會很麻煩,不過這個我覺得還好。其實主要是erlang語言本身帶來的問題。很難讀源碼,很難定制和掌控。
- RocketMQ
單機吞吐量:十萬級
topic數量都吞吐量的影響:topic可以達到幾百,幾千個的級別,吞吐量會有較小幅度的下降??芍С执罅縯opic是一大優勢。
時效性:ms級
可用性:非常高,分布式架構
消息可靠性:經過參數優化配置,消息可以做到0丟失
功能支持:MQ功能較為完善,還是分布式的,擴展性好
總結:
接口簡單易用,可以做到大規模吞吐,性能也非常好,分布式擴展也很方便,社區維護還可以,可靠性和可用性都是ok的,還可以支撐大規模的topic數量,支持復雜MQ業務場景
而且一個很大的優勢在于,源碼是java,我們可以自己閱讀源碼,定制自己公司的MQ,可以掌控
社區活躍度相對較為一般,不過也還可以,文檔相對來說簡單一些,然后接口這塊不是按照標準JMS規范走的有些系統要遷移需要修改大量代碼
- Kafka
單機吞吐量:十萬級,最大的優點,就是吞吐量高。
topic數量都吞吐量的影響:topic從幾十個到幾百個的時候,吞吐量會大幅度下降。所以在同等機器下,kafka盡量保證topic數量不要過多。如果要支撐大規模topic,需要增加更多的機器資源
時效性:ms級
可用性:非常高,kafka是分布式的,一個數據多個副本,少數機器宕機,不會丟失數據,不會導致不可用
消息可靠性:經過參數優化配置,消息可以做到0丟失
功能支持:功能較為簡單,主要支持簡單的MQ功能,在大數據領域的實時計算以及日志采集被大規模使用
總結:
kafka的特點其實很明顯,就是僅僅提供較少的核心功能,但是提供超高的吞吐量,ms級的延遲,極高的可用性以及可靠性,而且分布式可以任意擴展
同時kafka最好是支撐較少的topic數量即可,保證其超高吞吐量
kafka唯一的一點劣勢是有可能消息重復消費,那么對數據準確性會造成極其輕微的影響,在大數據領域中以及日志采集中,這點輕微影響可以忽略
RabbitMQ 比 Kafaka可靠, Kafka 更適合IO高吞吐的處理, 一般用在大數據日志處理或對實時性(少量延遲), 可靠性(少量丟失數據), 要求稍低的場景使用, 比如ELK日志收集
RabbitMQ引言
RabbitMQ是實現了高級消息隊列協議(AMQP)的開源消息代理軟件(亦稱面向消息的中間件)。RabbitMQ服務器是用Erlang語言編寫的,而集群和故障轉移是構建在開放電信平臺框架上的。所有主要的編程語言均有與代理接口通訊的客戶端庫。
- rabbitmq 官網:https://www.rabbitmq.com/
- erlang 環境 https://www.erlang.org/downloads https://github.com/erlang/otp/releases
| 3.8.10、3.8.9 | 22.3 | 23.x |
- AMQP協議
AMQP(advanced message queuing protocol)`在2003年時被提出,最早用于解決金融領不同平臺之間的消息傳遞交互問題。顧名思義,AMQP是一種協議,更準確的說是一種binary wire-level protocol(鏈接協議)。這是其和JMS的本質差別,AMQP不從API層進行限定,而是直接定義網絡交換的數據格式。這使得實現了AMQP的provider天然性就是跨平臺的。以下是AMQP協議模型:
安裝
Windows 安裝
- 安裝 erlang環境
- 配置 erlang環境變量
- 安裝 rabbitmq
使用
sbin 目錄下
- RabbitMQ Service-install 安裝服務
- RabbitMQ Service-remove 刪除服務
- RabbitMQ Service-start 啟動
- RabbitMQ Service-stop 啟動
訪問 RabbitMQ 主頁
在sbin目錄啟動控制臺, 輸入以下命令
rabbitmq-plugins.bat enable rabbitmq_management通過 http://localhost:15672 訪問
默認賬號密碼: guest|guest
注意一點:當卸載重新安裝的時候會出現 RabbitMQ 服務注冊失敗, 此時需要進入注冊表 清理erlang 搜索 RabbitMQ ErlSrv, 對應的項全部刪除
Linux 安裝
-
1.將rabbitmq安裝包上傳到linux系統中
erlang-22.0.7-1.el7.x86_64.rpm
rabbitmq-server-3.7.18-1.el7.noarch.rpm -
2.安裝Erlang依賴包
rpm -ivh erlang-22.0.7-1.el7.x86_64.rpm -
3.安裝RabbitMQ安裝包(需要聯網)
yum install -y rabbitmq-server-3.7.18-1.el7.noarch.rpm
注意:默認安裝完成后配置文件模板在:/usr/share/doc/rabbitmq-server-3.7.18/rabbitmq.config.example目錄中,需要
將配置文件復制到/etc/rabbitmq/目錄中,并修改名稱為rabbitmq.config -
4.復制配置文件
cp /usr/share/doc/rabbitmq-server-3.7.18/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config -
5.查看配置文件位置
ls /etc/rabbitmq/rabbitmq.config -
6.修改配置文件(參見下圖:)
vim /etc/rabbitmq/rabbitmq.config
將上圖中配置文件中紅色部分去掉%%,以及最后的,逗號 修改為下圖:
-
7.執行如下命令,啟動rabbitmq中的插件管理
rabbitmq-plugins enable rabbitmq_management出現如下說明:
Enabling plugins on node rabbit@localhost:
rabbitmq_management
The following plugins have been configured:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch
Applying plugin configuration to rabbit@localhost…
The following plugins have been enabled:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatchset 3 plugins.
Offline change; changes will take effect at broker restart. -
8.啟動RabbitMQ的服務
systemctl start rabbitmq-server
systemctl restart rabbitmq-server
systemctl stop rabbitmq-server -
9.查看服務狀態(見下圖:)
systemctl status rabbitmq-server
● rabbitmq-server.service - RabbitMQ broker
Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; disabled; vendor preset: disabled)
Active: active (running) since 三 2019-09-25 22:26:35 CST; 7s ago
Main PID: 2904 (beam.smp)
Status: “Initialized”
CGroup: /system.slice/rabbitmq-server.service
├─2904 /usr/lib64/erlang/erts-10.4.4/bin/beam.smp -W w -A 64 -MBas ageffcbf -MHas ageffcbf -
MBlmbcs…
├─3220 erl_child_setup 32768
├─3243 inet_gethost 4
└─3244 inet_gethost 4
…
- 10.關閉防火墻服務
systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
systemctl stop firewalld
也可以放開15672端口
- 11.訪問web管理界面
http://10.15.0.8:15672/
文章已上傳gitee https://gitee.com/codingce/hexo-blog
項目地址: https://github.com/xzMhehe/codingce-java
總結
以上是生活随笔為你收集整理的MQ的引言|不同MQ的特点|RabbitMQ安装的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用七牛云和PicGo搭建图床
- 下一篇: idea 解决查看源码没有注释