日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RabbitMQ 简介和使用

發布時間:2024/7/5 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 最初起源于金融系統,用于在分布式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。具體特點包括:

  • 可靠性(Reliability)
    RabbitMQ 使用一些機制來保證可靠性,如持久化、傳輸確認、發布確認。
  • 靈活的路由(Flexible Routing)
    在消息進入隊列之前,通過 Exchange 來路由消息的。對于典型的路由功能,RabbitMQ 已經提供了一些內置的 Exchange 來實現。針對更復雜的路由功能,可以將多個 Exchange 綁定在一起,也通過插件機制實現自己的 Exchange 。
  • 消息集群(Clustering)
    多個 RabbitMQ 服務器可以組成一個集群,形成一個邏輯 Broker 。
  • 高可用(Highly Available Queues)
    隊列可以在集群中的機器上進行鏡像,使得在部分節點出問題的情況下隊列仍然可用。
  • 多種協議(Multi-protocol)
    RabbitMQ 支持多種消息隊列協議,比如 STOMP、MQTT 等等。
  • 多語言客戶端(Many Clients)
    RabbitMQ 幾乎支持所有常用語言,比如 Java、.NET、Ruby 等等。
  • 管理界面(Management UI)
    RabbitMQ 提供了一個易用的用戶界面,使得用戶可以監控和管理消息 Broker 的許多方面。
  • 跟蹤機制(Tracing)
    如果消息異常,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 xmlto

    1.2 安裝Erlang

  • 將Erlang源代碼包otp_src_19.3.tar.gz上傳到Linux的/home目錄下
  • 解壓erlang 源碼包
  • tar -zxvf otp_src_19.3.tar.gz
  • 手動創建erlang 的安裝目錄
  • mkdir /usr/local/erlang
  • 進入erlang的解壓目錄
  • cd otp_src_19.3
  • 配置erlang的安裝信息
  • ./configure --prefix=/usr/local/erlang --without-javac
  • 編譯并安裝
  • make && make install
  • 配置環境變量
  • vim /etc/profile
  • 將這些配置填寫到profile文件的最后
  • ERL_HOME=/usr/local/erlang PATH=$ERL_HOME/bin:$PATH export ERL_HOME PATH
  • 啟動環境變量配置文件
  • source /etc/profile
  • 查看
  • erl -version

    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.rpm

    3、常用命令

    3.1. 啟動和關閉

  • 啟動RabbitMQ
  • rabbitmq-server start

    注意:這里可能會出現錯誤,錯誤原因是/var/lib/rabbitmq/.erlang.cookie文件權限不夠。

    解決方案對這個文件授權:

    chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookiechmod 400 /var/lib/rabbitmq/.erlang.cookie
  • 停止服務
  • rabbitmqctl stop
  • 查看啟動后的進程
  • ps -ef | grep rabbitmq

    3.2. 插件管理

  • 添加插件
  • rabbitmq-plugins enable {插件名}
  • 刪除插件
  • rabbitmq-plugins disable {插件名} 注意:RabbitMQ啟動以后可以使用瀏覽器進入管控臺但是默認情況RabbitMQ不允許直接使用瀏覽器瀏覽器進行訪問因此必須添加插件 rabbitmq-plugins enable rabbitmq_management
  • 使用瀏覽器訪問管控臺 http://RabbitMQ服務器IP:15672
  • http://192.168.71.128:15672


    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. 權限管理

  • 授權命令:rabbitmqctl set_permissions [-p vhostpath] {user} {conf} {write} {read}-p vhostpath
    用于指定一個資源的命名空間,例如 –p / 表示根路徑命名空間
  • user:用于指定要為哪個用戶授權填寫用戶名
    conf:一個正則表達式match哪些配置資源能夠被該用戶配置。
    write:一個正則表達式match哪些配置資源能夠被該用戶讀。
    read:一個正則表達式match哪些配置資源能夠被該用戶訪問。
    例如:rabbitmqctl set_permissions -p / root “.” “.” “.*”
    用于設置root用戶擁有對所有資源的 讀寫配置權限

  • 查看用戶權限 rabbitmqctl list_permissions [vhostpath]
  • 例如查看根徑經下的所有用戶權限: rabbitmqctl list_permissions
    查看指定命名空間下的所有用戶權限: rabbitmqctl list_permissions /abc

  • 查看指定用戶下的權限rabbitmqctl list_user_permissions {username}
  • 例如查看root用戶下的權限 rabbitmqctl list_user_permissions root

  • 清除用戶權限rabbitmqctl clear_permissions {username}
  • 例如:清除root用戶的權限 rabbitmqctl clear_permissions root

    3.5. vhost管理

    vhost是RabbitMQ中的一個命名空間,可以限制消息的存放位置利用這個命名空間可以進行權限的控制有點類似Windows中的文件夾一樣,在不同的文件夾中存放不同的文件。

  • 添加vhost: rabbitmqctl add vhost {name}
  • 例如 rabbitmqctl add vhost bjpowernode

  • 刪除vhost:rabbitmqctl delete vhost {name}
  • 例如 rabbitmqctl delete vhost bjpowernode

    三、RabbitMQ消息發送和接收

    1、 RabbitMQ的消息發送和接收機制

    MQ的基本抽象模型:

    RabbitMQ的內部接收:

    舉例說明:

    2、Exchange類型

  • direct
    消息中的路由鍵(routing key)如果和 Binding 中的 binding key 一致, 交換器就將消息發到對應的隊列中。它是完全匹配、單播的模式。
  • fanout
    每個發到 fanout 類型交換器的消息都會分到所有綁定的隊列上去。fanout 類型是一種廣播模式,轉發消息是最快的。

    這種模式就和我們收看電視直播一樣,需要提前在消費者中監聽隊列,否則如果消息先發送了,那么消費者可能永遠接收不到,就錯過了。這種模式的交換機適合適合使用在一些消息數據不是很重要的應用中,用戶接收到和接收不到都無所謂。例如:手機app的消息推送。
  • topic
    topic 交換器通過模式匹配分配消息的路由鍵屬性,將路由鍵和某個模式進行匹配,此時隊列需要綁定到一個模式上。它有兩個通配符:符號“#”和符號“*”。#匹配0個或多個單詞,*匹配不多不少一個單詞。

    他也會丟失消息,也應該先啟動消費者監聽隊列。
  • 3、RabbitMQ發送消息

    創建maven工程

  • 添加依賴:
  • <dependencies> <dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.1.1</version> </dependency> </dependencies>
  • 編寫Send類
  • public class Send{public static void main(String[] args) throws IOException, TimeoutException {//創建鏈接工廠對象ConnectionFactory factory=new ConnectionFactory();//設置RabbitMQ連接相關信息factory.setHost("192.168.171.143");//設置RabbitMQ的主機IPfactory.setPort(5672);//設置RabbitMQ的端口號factory.setUsername("root");//設置訪問用戶名factory.setPassword("root");//設置訪問密碼Connection connection=null;//定義鏈接對象Channel channel=null;//定義通道對象connection=factory.newConnection();//獲取鏈接channel=connection.createChannel();//獲取通道//指定Exchange的類型//參數1為 交換機名稱//參數2為 交換機類型取值為 direct、fanout、topic、headers//參數3為 是否為持久化消息 true表示持久化消息 false表示非持久化channel.exchangeDeclare("myExchange", "direct", true);//發送消息到RabbitMQ//參數1 我們自定義的交換機名稱//參數2 自定義的RoutingKey值//參數3 設置消息的屬性,可以通過消息屬性設置消息是否是持久化的//參數4 具體要發送的消息信息String message ="Hello World!3";channel.basicPublish("myExchange","myRoutingKey",null,message.getBytes("UTF-8"));System.out.println("消息發送成功: "+message);channel.close();connection.close();} }

    四、SpringBoot集成RabbitMQ

    五、RabbitMQ集群

    總結

    以上是生活随笔為你收集整理的RabbitMQ 简介和使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。