RabbitMQ 简介和使用
RabbitMQ
- 一、RabbitMQ概述
- 1、什么是消息隊列
- 2、為什么要使用消息隊列
- 3、RabbitMQ特點
- 二、RabbitMQ安裝
- 1、安裝前準備
- 1.1 依賴包安裝
- 1.2 安裝Erlang
- 2、安裝
- 3、常用命令
- 3.1. 啟動和關閉
- 3.2. 插件管理
- 3.3. 用戶管理
- 3.4. 權限管理
- 3.5. vhost管理
- 三、RabbitMQ消息發送和接收
- 1、 RabbitMQ的消息發送和接收機制
- 2、Exchange類型
- 3、RabbitMQ發送消息
- 四、SpringBoot集成RabbitMQ
- 五、RabbitMQ集群
一、RabbitMQ概述
1、什么是消息隊列
消息(Message) 是指在應用間傳遞的數據。消息可以非常簡單,比如只包含文本字符串,也可以很復雜,可能包含嵌入對象。
消息隊列(Message Queue) 是一種應用間的通信方式,消息發送后可以立即返回,由消息系統來確保消息的可靠傳遞。消息發布者只管把消息發布到 MQ 中而不用管誰來取,消息使用者只管從 MQ 中取消息而不管是誰發布的。這樣發布者和使用者都不用知道對方的存在。
2、為什么要使用消息隊列
從上面的描述中可以看出消息隊列是一種應用間的異步協調機制,那什么時候需要使用MQ呢?
以常見的訂單系統為例,用戶點擊【下單】按鈕之后的業務邏輯可能包括:扣減庫存、生成響應單據、發紅包、發短信通知。在業務發展初期這些邏輯可能放在一起同步執行,隨著業務的發展訂單量增長,需要提升系統服務的性能,這是可以將一些不需要立即生效的操作拆分出來異步執行,比如發送紅包、發短信通知等。這種場景下就可以用MQ,在下單的主流程(比如扣減庫存、生成響應單據)完成之后發送一條消息到MQ讓主流程快速完成,而由另外的單獨線程拉去MQ的消息(或由MQ推送消息),當發現MQ中有發紅包或發短信之類的消息時,執行響應的業務邏輯。
以上是用于業務結偶的情況,其他常見場景包括最終一致性、廣播、錯峰流控等等。
強一致性:比如上面四個操作要么全部執行成功,要么全部不執行。
最終一致性:比如上面四個操作,主操作先執行,最后另外兩個操作最終也執行完即可,不必同時完成。
廣播:比如消息推送。
錯峰流控:比如流量太大的時候,超過一定量的時候,再來訪問就排隊,防止服務器被整垮。
3、RabbitMQ特點
RabbitMQ 是一個由 Erlang 語言開發的 AMQP 的開源實現。
AMQP:Advanced Message Queue,高級消息隊列協議。應用層協議的一個開放標準,為面向消息的中間件設計,基于此協議的客戶端與消息中間件可傳遞消息,并不受產品、開發語言等條件的限制。
RabbitMQ 最初起源于金融系統,用于在分布式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。具體特點包括:
RabbitMQ 使用一些機制來保證可靠性,如持久化、傳輸確認、發布確認。
在消息進入隊列之前,通過 Exchange 來路由消息的。對于典型的路由功能,RabbitMQ 已經提供了一些內置的 Exchange 來實現。針對更復雜的路由功能,可以將多個 Exchange 綁定在一起,也通過插件機制實現自己的 Exchange 。
多個 RabbitMQ 服務器可以組成一個集群,形成一個邏輯 Broker 。
隊列可以在集群中的機器上進行鏡像,使得在部分節點出問題的情況下隊列仍然可用。
RabbitMQ 支持多種消息隊列協議,比如 STOMP、MQTT 等等。
RabbitMQ 幾乎支持所有常用語言,比如 Java、.NET、Ruby 等等。
RabbitMQ 提供了一個易用的用戶界面,使得用戶可以監控和管理消息 Broker 的許多方面。
如果消息異常,RabbitMQ 提供了消息跟蹤機制,使用者可以找出發生了什么。
kafka效率高但是不安全,RabbitMQ效率沒他高但是安全,使用的企業也多。
二、RabbitMQ安裝
一般來說安裝 RabbitMQ 之前要安裝 Erlang ,可以去Erlang官網下載。接著去RabbitMQ官網下載安裝包,之后解壓縮即可。
Erlang官方下載地址:https://www.erlang.org/downloads
RabbitMQ官方下載地址:https://www.rabbitmq.com/download.html
1、安裝前準備
1.1 依賴包安裝
安裝RabbitMQ之前必須要先安裝所需要的依賴包可以使用下面的一次性安裝命令
yum install gcc glibc-devel make ncurses-devel openssl-devel xmlto1.2 安裝Erlang
2、安裝
1、 將RabbitMQ安裝包 rabbitmq-server-3.7.2-1.el7.noarch.rpm 上傳到 /home 目錄
2、安裝RabbitMQ(rpm文件相當于windows中的exe文件)
rpm -ivh --nodeps rabbitmq-server-3.7.2-1.el7.noarch.rpm3、常用命令
3.1. 啟動和關閉
注意:這里可能會出現錯誤,錯誤原因是/var/lib/rabbitmq/.erlang.cookie文件權限不夠。
解決方案對這個文件授權:
chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookiechmod 400 /var/lib/rabbitmq/.erlang.cookie3.2. 插件管理
3.3. 用戶管理
RabbitMQ安裝成功后使用默認用戶名guest登錄:
賬號:guest
密碼:guest
注意:這里guest只允許本機登錄訪問
需要創建用戶并授權遠程訪問命令如下:
添加用戶:rabbitmqctl add_user {username} {password}
刪除用戶:rabbitmqctl delete_user {username}
修改密碼:rabbitmqctl change_password {username} {newpassword}
設置用戶角色:rabbitmqctl set_user_tags {username} {tag}
tag用戶角色取值為:management, monitoring, policymaker, administrator
各角色詳解:
management:
用戶可以通過AMQP做的任何事外加:
列出自己可以通過AMQP登入的virtual hosts
查看自己的virtual hosts中的queues, exchanges 和 bindings
查看和關閉自己的channels 和 connections
查看有關自己的virtual hosts的“全局”的統計信息,包含其他用戶在這些virtual hosts中的活動。
policymaker :
management可以做的任何事外加:
查看、創建和刪除自己的virtual hosts所屬的policies和parameters
monitoring :
management可以做的任何事外加:
列出所有virtual hosts,包括他們不能登錄的virtual hosts
查看其他用戶的connections和channels
查看節點級別的數據如clustering和memory使用情況
查看真正的關于所有virtual hosts的全局的統計信息
administrator:
policymaker和monitoring可以做的任何事外加:
創建和刪除virtual hosts
查看、創建和刪除users
查看創建和刪除permissions
關閉其他用戶的connections
3.4. 權限管理
用于指定一個資源的命名空間,例如 –p / 表示根路徑命名空間
user:用于指定要為哪個用戶授權填寫用戶名
conf:一個正則表達式match哪些配置資源能夠被該用戶配置。
write:一個正則表達式match哪些配置資源能夠被該用戶讀。
read:一個正則表達式match哪些配置資源能夠被該用戶訪問。
例如:rabbitmqctl set_permissions -p / root “.” “.” “.*”
用于設置root用戶擁有對所有資源的 讀寫配置權限
例如查看根徑經下的所有用戶權限: rabbitmqctl list_permissions
查看指定命名空間下的所有用戶權限: rabbitmqctl list_permissions /abc
例如查看root用戶下的權限 rabbitmqctl list_user_permissions root
例如:清除root用戶的權限 rabbitmqctl clear_permissions root
3.5. vhost管理
vhost是RabbitMQ中的一個命名空間,可以限制消息的存放位置利用這個命名空間可以進行權限的控制有點類似Windows中的文件夾一樣,在不同的文件夾中存放不同的文件。
例如 rabbitmqctl add vhost bjpowernode
例如 rabbitmqctl delete vhost bjpowernode
三、RabbitMQ消息發送和接收
1、 RabbitMQ的消息發送和接收機制
MQ的基本抽象模型:
RabbitMQ的內部接收:
舉例說明:
2、Exchange類型
消息中的路由鍵(routing key)如果和 Binding 中的 binding key 一致, 交換器就將消息發到對應的隊列中。它是完全匹配、單播的模式。
每個發到 fanout 類型交換器的消息都會分到所有綁定的隊列上去。fanout 類型是一種廣播模式,轉發消息是最快的。
這種模式就和我們收看電視直播一樣,需要提前在消費者中監聽隊列,否則如果消息先發送了,那么消費者可能永遠接收不到,就錯過了。這種模式的交換機適合適合使用在一些消息數據不是很重要的應用中,用戶接收到和接收不到都無所謂。例如:手機app的消息推送。
topic 交換器通過模式匹配分配消息的路由鍵屬性,將路由鍵和某個模式進行匹配,此時隊列需要綁定到一個模式上。它有兩個通配符:符號“#”和符號“*”。#匹配0個或多個單詞,*匹配不多不少一個單詞。
他也會丟失消息,也應該先啟動消費者監聽隊列。
3、RabbitMQ發送消息
創建maven工程
四、SpringBoot集成RabbitMQ
五、RabbitMQ集群
總結
以上是生活随笔為你收集整理的RabbitMQ 简介和使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 企业咨询:常用分析和咨询方法列表
- 下一篇: JAVA1.6实现动态编译加载运行