Ubuntu中安裝RabbitMQ


  • rabbitmq 簡介
  • ubuntu 安裝rabbitmq
  • 一些配置及常用命令

簡介

消息隊列一般用於系統間對接,能夠降低系統耦合度。通過將消息的發送和接收分離來實現應用程序的異步和解耦。你可以使用消息隊列實現:

  • 數據分發
  • 非阻塞操作或推送通知(如郵件、短信提醒等)
  • 實現發布/訂閱,異步處理
  • 工作隊列

RabbitMq作為一款消息隊列產品,它由Erlang語言開發,實現AMQP(高級消息隊列協議)的開源消息中間件。

應用場景

  1. 異步處理
    場景說明:用戶注冊后,注冊信息寫入數據庫,再發郵件、短信通知。但后兩項並非必須,傳統做法:數據寫入->發送短信->發送郵件->返回給用戶。用戶等待所有任務完成。
    引入rabbitmq:可以將短信通知、郵件通知這兩個非必要的任務寫入到消息隊列,再由專門的任務處理程序去讀取消息發送通知。用戶等待時間變成寫入數據庫時間+寫入消息隊列時間。

  2. 應用解耦
    網上購物,用戶提交訂單后,訂單系統需要通知庫存系統。傳統做法,訂單系統直接調用庫存系統api。當庫存系統出現故障,則訂單失效。
    一如rabbitmq:訂單系統完成持久化,將消息寫入消息隊列。庫存系統訂閱消息隊列中的訂單,庫存系統故障了,也不會導致訂單丟失。恢復后可以從消息隊列繼讀取訂單處理。

  3. 流量削峰
    前端加入消息隊列。大批量用戶請求到達后,寫入消息隊列,並設置最大閾值。超過該閾值的請求丟棄返回錯誤給客戶端。系統只需要從消息隊列中取正常的請求來進行處理即可。

安裝

安裝環境:Ubuntu 20.04,使用如下命令安裝。

sudo apt install rabbitmq-server
systemctl status rabbitmq-server         #檢查狀態
service rabbitmq-server status          #檢查狀態

下面是啟動后,查看狀態的輸出。

● rabbitmq-server.service - RabbitMQ Messaging Server
     Loaded: loaded (/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2021-12-21 14:28:04 CST; 4min 24s ago
   Main PID: 94216 (beam.smp)
     Status: "Initialized"
      Tasks: 85 (limit: 4611)
     Memory: 56.2M
     CGroup: /system.slice/rabbitmq-server.service
             ├─94212 /bin/sh /usr/sbin/rabbitmq-server
             ├─94216 /usr/lib/erlang/erts-9.2/bin/beam.smp -W w -A 64 -P 1048576 -t 5000000 -stbt db -zdbbl 32000 -K tr>
             ├─94309 /usr/lib/erlang/erts-9.2/bin/epmd -daemon
             ├─94445 erl_child_setup 65536
             ├─94465 inet_gethost 4
             └─94466 inet_gethost 4

Dec 21 14:28:01 pc-ubuntu systemd[1]: Starting RabbitMQ Messaging Server...
Dec 21 14:28:04 pc-ubuntu systemd[1]: rabbitmq-server.service: Supervising process 94216 which is not our child. We'll >
Dec 21 14:28:04 pc-ubuntu systemd[1]: Started RabbitMQ Messaging Server.
Dec 21 14:28:05 pc-ubuntu systemd[1]: rabbitmq-server.service: Supervising process 94216 which is not our child. We'll >

下面是一些常用管理命令,包括啟用、停用、重啟。

sudo service rabbitmq-server start       #啟用
sudo service rabbitmq-server stop        #停用
sudo service rabbitmq-server restart     #重啟

停用后,再次查看狀態,輸出如下。重點查看Active后面的內容,此時為inactive(dead).

● rabbitmq-server.service - RabbitMQ Messaging Server
     Loaded: loaded (/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: enabled)
     Active: inactive (dead) since Tue 2021-12-21 14:33:36 CST; 9s ago
    Process: 95123 ExecStop=/usr/sbin/rabbitmqctl stop (code=exited, status=0/SUCCESS)
   Main PID: 94216
     Status: "Initialized"

Dec 21 14:28:01 pc-ubuntu systemd[1]: Starting RabbitMQ Messaging Server...
Dec 21 14:28:04 pc-ubuntu systemd[1]: rabbitmq-server.service: Supervising process 94216 which is not our child. We'll >
Dec 21 14:28:04 pc-ubuntu systemd[1]: Started RabbitMQ Messaging Server.
Dec 21 14:28:05 pc-ubuntu systemd[1]: rabbitmq-server.service: Supervising process 94216 which is not our child. We'll >
Dec 21 14:33:35 pc-ubuntu systemd[1]: Stopping RabbitMQ Messaging Server...
Dec 21 14:33:36 pc-ubuntu rabbitmq[95131]: Stopping and halting node 'rabbit@pc-ubuntu'
Dec 21 14:33:36 pc-ubuntu systemd[1]: rabbitmq-server.service: Killing process 94216 (beam.smp) with signal SIGKILL.
Dec 21 14:33:36 pc-ubuntu systemd[1]: rabbitmq-server.service: Succeeded.
Dec 21 14:33:36 pc-ubuntu systemd[1]: Stopped RabbitMQ Messaging Server.

開啟Web管理

sudo rabbitmq-plugins enable rabbitmq_management

注意,執行上面的命令時,要確保rabbitmq在運行狀態中。
執行完后,在瀏覽器中輸入http://localhost:15672 並使用guest/guest 作為用戶名密碼登錄。

rabbitmqweb管理

用戶管理命令

sudo rabbitmqctl list_users #列出用戶
sudo rabbitmqctl add_user admin adminpassword   #添加用戶
sudo rabbitmqctl set_user_tags admin administrator #給用戶添加角色
sudo rabbitmqctl delete_user admin  #刪除用戶

給用戶配置VirtualHost中的讀寫權限。使用set_permissions命令來將rabbitadmin這個用戶賦予/這個虛擬主機的讀、寫、配置權限。rabbitmq安裝好后,會默認有這個/虛擬主機的。通過Web管理端可以看見,guest用戶對其有所有權限。通過下面命令,將我們剛才創建的rabbitadmin也賦權過去。

sudo rabbitmqctl set_permissions -p / rabbitadmin '.*' '.*' '.*'

參考

  1. rabbitmq中文文檔
  2. 超詳細的RabbitMQ入門,看這篇就夠了!
  3. ubuntu中安裝rabbitmq
  4. RabbitMQ官網

原文鏈接:
https://edsiongithub.github.io/2021/12/21/26/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM