RabbitMQ安裝及使用

系列文章目錄


文章目錄

  • 系列文章目錄
  • 前言
  • 一、下載
  • 二、安裝
  • 三、插件安裝
  • 四、配置
  • 五、權限
  • 六、集群模式


前言

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到網站,這篇文章男女通用,看懂了就去分享給你的碼吧。
在這里插入圖片描述


一、下載

由于RabbitMQ是基于Erlang語言開發,所以在安裝RabbitMQ之前,需要先安裝Erlang。好在RabbitMQ官網已經為我們提供了Erlang的安裝包

Erlang下載地址:http://www.rabbitmq.com/releases/erlang/

本人使用的操作系統為:CentOS7

下載的Erlang安裝包為:erlang-19.0.4-1.el7.centos.x86_64.rpm

RabbitMQ下載地址:https://www.rabbitmq.com/download.html

下載的RabbitMQ安裝包為:rabbitmq-server-3.6.8-1.el7.noarch.rpm

二、安裝

將下載的兩個文件上傳到/usr/local目錄,先安裝Erlang

yum install erlang-19.0.4-1.el7.centos.x86_64.rpm

測試Erlang是否安裝成功

erl -version

出現以下信息則表示安裝成功:Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 8.0.3

安裝RabbitMQ

yum install rabbitmq-server-3.6.8-1.el7.noarch.rpm

運行RabbitMQ

cd /usr/sbin
./rabbitmq-server start

出現以下信息,則表示啟動成功:

RabbitMQ 3.6.8. Copyright ? 2007-2016 Pivotal Software, Inc.

## ## Licensed under the MPL. See http://www.rabbitmq.com/
## ##
########## Logs: /var/log/rabbitmq/rabbit@mq01.log
###### ## /var/log/rabbitmq/rabbit@mq01-sasl.log
##########
Starting broker...
completed with 0 plugins.

后臺啟動可使用:

./rabbitmq-server -detached

停止服務可使用:

./rabbitmqctl stop

三、插件安裝

查看目前RabbitMQ已安裝的插件

cd /usr/sbin
./rabbitmq-plugins list

安裝web管理端

./rabbitmq-plugins enable rabbitmq_management

安裝成功后,啟動MQ

通過瀏覽器訪問地址:http://192.168.120.129:15672/#/

由于guest用戶被限制,只能通過localhost訪問,因此我們需要新建一個用戶,并授予管理員權限。

新建一個用戶名為admin,密碼為admin的用戶,并授予管理員(administrator)權限

./rabbitmqctl add_user admin admin
./rabbitmqctl set_user_tags admin administrator

安裝mqtt

./rabbitmq-plugins enable rabbitmq_mqtt

安裝websocket

./rabbitmq-plugins enable rabbitmq_web_stomp
./rabbitmq-plugins enable rabbitmq_web_stomp_examples

四、配置

如果需要修改RabbitMQ的默認配置,先查找配置文件樣例位置

find / -name "rabbitmq.config.example"

然后將樣例配置復制到制定目錄

cp /usr/share/doc/rabbitmq-server-3.6.8/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config

修改樣例文件,并保存,重啟MQ生效。

五、權限

主要是set_permissions的使用,先看下命令的格式:

set_permissions [-p vhost] {user} {conf} {write} {read}
首先需要注意以下幾點的理解:

1.這里的權限,只是針對一般用戶的訪問權限,注意和角色的區分。舉個例子來說,非管理用戶(普通用戶),角色設置為none,然后在這里配置conf、write、read的權限。

2.conf、write、read采用正則表達式,這里的正則主要是針對exchange和queue。主要2種特殊的表達式:

^$:表示完全不匹配(即沒有權限)

.*:表示匹配所有(即所有權限)

如果使用RabbitMQ作為消息推送服務,需要授予用戶只讀訪問Stomp主題權限,同時授予另一個用戶對同一主題的讀寫訪問權限。

這樣的話主題訂閱者就不能發布消息,從而解決安全性問題。

但是如果直接這樣授權:

rabbitmqctl set_permissions read-only-user '.*' '^$' '.*' 

會報如下錯誤:

 ERROR message:access_refused content-type:text/plain version:1.0,1.1,1.2 content-length:114 ACCESS_REFUSED - access to queue 'stomp-subscription-APK3zkvXFqxvSiZ9ztmxYQ' in vhost '/' refused for user 'test'Whoops! Lost connection to ws://221.0.200.202:15674/ws

這樣配置存在一個問題,將阻止任何寫入,阻止任何寫入將導致沒有權限連接到RabbitMQ的服務

需要對可讀用戶權限做如下調整:

rabbitmqctl set_permissions read-only-user '^stomp-subscription.*$' '^stomp-subscription.*$' '.*' 

六、集群模式

RabbitMQ集群模式分為兩種:普通模式,鏡像模式(HA)

普通模式:默認的集群模式
對于Queue來說,消息實體只存在于其中一個節點,A、B兩個節點僅有相同的元數據,即隊列結構。

當消息進入A節點的Queue中后,consumer從B節點拉取時,RabbitMQ會臨時在A、B間進行消息傳輸,把A中的消息實體取出并經過B發送給consumer。

所以consumer應盡量連接每一個節點,從中取消息。即對于同一個邏輯隊列,要在多個節點建立物理Queue。否則無論consumer連A或B,出口總在A,會產生瓶頸。

該模式存在一個問題就是當A節點故障后,B節點無法取到A節點中還未消費的消息實體。

如果做了消息持久化,那么得等A節點恢復,然后才可被消費;如果沒有持久化的話,然后就沒有然后了……

鏡像模式:把需要的隊列做成鏡像隊列,存在于多個節點,屬于RabbitMQ的HA方案
該模式解決了上述問題,其實質和普通模式不同之處在于,消息實體會主動在鏡像節點間同步,而不是在consumer取數據時臨時拉取。

該模式帶來的副作用也很明顯,除了降低系統性能外,如果鏡像隊列數量過多,加之大量的消息進入,集群內部的網絡帶寬將會被這種同步通訊大大消耗掉。

所以在對可靠性要求較高的場合中適用。

服務器信息:
 我們準備了兩臺服務器,系統為Centos7,對應的ip跟hostname分別為

192.168.1.242    mq01
192.168.1.243    mq02

在安裝好的兩臺節點服務器中,分別修改/etc/hosts文件,指定mq01,mq02的hosts,如:

192.168.1.242    mq01
192.168.1.243    mq02

注意:hostname文件也要正確,分別是mq01、mq02,如果修改hostname建議在安裝rabbitmq前修改。

設置 Erlang Cookie:
Rabbitmq的集群是依賴于erlang的集群來工作的,所以必須先構建起erlang的集群環境。Erlang的集群中各節點是通過一個magic cookie來實現的,這個cookie存放在 /var/lib/rabbitmq/.erlang.cookie 中,文件是400的權限。所以必須保證各節點cookie保持一致,否則節點之間就無法通信。

查看文件權限的命令為:

ls -l /var/lib/rabbitmq/.erlang.cookie

這里將 mq01的 /var/lib/rabbitmq/.erlang.cookie文件復制到 mq02,由于這個文件權限是 400,所以需要先修改該文件權限為 777:

chmod 777 /var/lib/rabbitmq/.erlang.cookie

使用scp或其他方式將該文件復制到mq02服務器的相同目錄,并覆蓋。

然后將mq01的 /var/lib/rabbitmq/.erlang.cookie文件權限修改回來

chmod 400 /var/lib/rabbitmq/.erlang.cookie

組成集群
重啟RabbitMQ服務:

rabbitmqctl stop
rabbitmq-server -detached

將mq02與mq01組成集群:

./rabbitmqctl stop_app
./rabbitmqctl join_cluster rabbit@mq01
./rabbitmqctl stop
./rabbitmq-server -detached

如果要使用內存節點,則可以使用–ram:

rabbitmqctl join_cluster --ram rabbit@mq01

查看集群是否配置成功:

rabbitmqctl cluster_status

HA集群模式配置
 上面配置RabbitMQ默認集群模式,但并不保證隊列的高可用性,盡管交換機、綁定這些可以復制到集群里的任何一個節點,但是隊列內容不會復制,雖然該模式解決一部分節點壓力,但隊列節點宕機直接導致該隊列無法使用,只能等待重啟,所以要想在隊列節點宕機或故障也能正常使用,就要復制隊列內容到集群里的每個節點,需要創建鏡像隊列。

設置鏡像隊列策略
在任意一個節點上執行:

rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

將所有隊列設置為鏡像隊列,即隊列會被復制到各個節點,各個節點狀態保持一直。

如果要為制定的vhost創建策略則使用-p:

rabbitmqctl set_policy -p hrsystem ha-allqueue"^" '{"ha-mode":"all"}'

這行命令在vhost名稱為hrsystem創建了一個策略,策略名稱為ha-allqueue,策略模式為 all 即復制到所有節點,包含新增節點,
策略正則表達式為 “^” 表示所有匹配所有隊列名稱。
例如rabbitmqctl set_policy -p hrsystem ha-allqueue “^message” ‘{“ha-mode”:“all”}’
注意:“^message” 這個規則要根據自己修改,這個是指同步"message"開頭的隊列名稱,我們配置時使用的應用于所有隊列,所以表達式為"^"

安裝并配置 HAProxy
在 服務器上安裝 HAProxy,然后修改
/etc/haproxy/haproxy.cfg:

listen rabbitmq_cluster 0.0.0.0:5672mode tcp
balance roundrobinserver   node1 192.168.1.242:5672 check inter 2000 rise 2 fall 3  
server   node2 192.168.1.243:5672 check inter 2000 rise 2 fall 3

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/715759.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/715759.shtml
英文地址,請注明出處:http://en.pswp.cn/news/715759.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【MATLAB源碼-第154期】基于matlab的OFDM系統多徑信道下塊狀和梳妝兩種導頻插入方式誤碼率對比仿真。

操作環境: MATLAB 2022a 1、算法描述 OFDM(Orthogonal Frequency Division Multiplexing,正交頻分復用)是一種高效的無線信號傳輸技術,廣泛應用于現代通信系統,如Wi-Fi、LTE和5G。OFDM通過將寬帶信道劃分…

[機緣參悟-158] :西游記中的“佛” 、“道”之爭

目錄 前言 一、西游記中的佛教元素 1.1 佛教元素 1.2 西游記佛教思想 1.3 佛教的三界五行:物質世界 1.4 佛教中不在三界內,不在五行中:精神世界 二、西游記中的道教元素 2.1 主要元素 2.2 道家思想 三、“佛”如何兼容“道” 3.1 …

RK3568 Android12 適配抖音 各大APP

RK3568 Android12 適配抖音 各大APP SOC RK3568 system:Android 12 平臺要適配抖音和各大APP 平臺首先打開抖音發現攝像頭預覽尺寸不對只存在右上角,我將抖音APP裝在手機上預覽,發現是全屏 一開始瀏覽各大博客 給出的解決方法是修改framework 設置為全屏顯示: framewo…

2369. 檢查數組是否存在有效劃分

2369. 檢查數組是否存在有效劃分 題目鏈接&#xff1a;2369. 檢查數組是否存在有效劃分 代碼如下&#xff1a; //動態規劃 class Solution { public:bool validPartition(vector<int>& nums) {vector<int> dp(nums.size()1,false);//dp[i]表示前i個元素組成的…

Tomcat基礎及與Nginx實現動靜分離,搭建高效穩定的個人博客系統

目錄 引言 一、TOMCAT基礎功能 &#xff08;一&#xff09;自動解壓war包 &#xff08;二&#xff09;狀態頁 1.登錄狀態頁 2.遠程登錄 &#xff08;三&#xff09;服務管理界面 &#xff08;四&#xff09;Host虛擬主機 1.設置虛擬主機 2.建立站點目錄與文件 二、實…

使用QEMU搭建U-Boot+LinuxKernel+busybox+NFS嵌入式開發環境

目錄 0.課程大綱1.為什么要使用QEMU學習嵌入式QEMU簡介使用QEMU可以做哪些事情?當前嵌入式行業現狀如何適應這種變化使用QEMU學習嵌入式有哪些好處?驅動開發技能為什么要學習Linux 2.搭建嵌入式開發基本環境2.1.安裝u-boot-tools2.2.安裝交叉編譯工具什么是ABI和EABI 3.QEMU安…

三、基準時鐘、生成時鐘、虛擬時鐘的約束和意義

**前言&#xff1a;**前面從理論角度出發學習了時序分析的基本原理&#xff0c;本篇從設計的角度學習如何合理添加時鐘約束。 文章目錄 一、基準時鐘&#xff08;base clock&#xff09;和生成時鐘(generate clock)二、基準時鐘的約束1.完成綜合&#xff08;run implementatio…

linux的通信方案(SYSTEM V)

文章目錄 共享內存(Share Memory)信號隊列&#xff08;Message Queue&#xff09;信號量(semaphore) 進程間通信的核心理念&#xff1a;讓不同的進程看見同一塊資源 linux下的通信方案&#xff1a; SYSTEM V 共享內存(Share Memory) 特點&#xff1a;1.共享內存是進程見通信最…

排序(4)——堆排序

目錄 堆排序&#xff08;回顧&#xff09; 基本思路 代碼實現 向下調整排序 AdjustDown 建堆排序 時間復雜度 特性總結 堆排序&#xff08;回顧&#xff09; 重點回顧戳&#x1f449;堆排序 基本思路 堆排序(Heapsort)是指利用堆積樹&#xff08;堆&#xff09;這種數…

SOCKS5代理、代理IP與網絡安全的奇妙旅程

在數字時代&#xff0c;互聯網安全和隱私成為了熱門話題。從個人瀏覽習慣到企業數據保護&#xff0c;每個人都希望他們的在線活動既安全又私密。在這個背景下&#xff0c;了解SOCKS5代理、代理IP、HTTP協議和網絡安全的基礎知識變得尤為重要。 什么是SOCKS5代理&#xff1f; SO…

鴻蒙系統開發適配注意事項

鴻蒙操作系統&#xff08;HarmonyOS&#xff09;的軟件適配涉及到一些特定的注意事項&#xff0c;以確保應用程序在該操作系統上的正常運行和最佳性能。以下是適配鴻蒙軟件時需要注意的一些關鍵問題&#xff0c;希望對大家有所幫助。北京木奇移動技術有限公司&#xff0c;專業的…

MySQL篇—執行計劃介紹(第二篇,總共三篇)

??博主介紹??&#xff1a; ?又是一天沒白過&#xff0c;我是奈斯&#xff0c;DBA一名? ???擅長Oracle、MySQL、SQLserver、Linux&#xff0c;也在積極的擴展IT方向的其他知識面??? ??????大佬們都喜歡靜靜的看文章&#xff0c;并且也會默默的點贊收藏加關注?…

Python 編輯工具 Jupyter notebook

Jupyter notebook Jupyter Notebook是基于網頁的用于交互計算的應用程序。其可被應用于全過程計算&#xff1a;開發、文檔編寫、運行代碼和展示結果。——Jupyter Notebook官方介紹 官網&#xff1a;Project Jupyter | Home Jupyter Notebook 是一個開源的交互式計算環境&#…

dockerdocker-copose_限制容器cpu和內存

本文目錄 docker的限制方式限制CPU占用限制內存占用 docker-compose docker的限制方式 限制CPU占用 Docker使用--cpus參數來限制容器的CPU資源。該參數指定了分配給容器的CPU核心數量或百分比。 例子&#xff1a;限制CPU使用個數 docker run --cpus2 <imageName>以上…

網頁版圖像處理軟件開發服務:助您項目在市場競爭中脫穎而出

在當今數字化時代&#xff0c;圖像處理在各個行業中扮演著重要的角色&#xff0c;虎克專注于提供定制化的網頁版圖像處理軟件開發服務&#xff0c;為您的項目保駕護航。 1.網頁版圖像處理軟件的定制化需求 1.1行業特定功能 針對不同的業務需求&#xff0c;深入了解行業特點&…

springboot基于web的酒店客房管理系統論文

基于web的酒店客房管理系統 摘要 隨著信息技術在管理上越來越深入而廣泛的應用&#xff0c;管理信息系統的實施在技術上已逐步成熟。本文介紹了酒店客房管理系統的開發全過程。通過分析酒店客房管理系統管理的不足&#xff0c;創建了一個計算機管理酒店客房管理系統的方案。文…

Redis 之八:Jdeis API 的使用(Java 操作 Redis)

Jedis API 使用 Jedis 是 Redis 官方推薦的 Java 客戶端&#xff0c;它提供了一套豐富的 API 來操作 Redis 服務器。通過 Jedis API&#xff0c;開發者可以方便地在 Java 應用程序中執行 Redis 的命令來實現數據的增刪查改以及各種復雜的數據結構操作。 以下是一些基本的 Jedis…

springboot網站開發-idea開發環境下無法開啟調試Debug模式

springboot網站開發-idea開發環境下無法開啟調試Debug模式的解決辦法。 近期在寫后端代碼的時候&#xff0c;發現&#xff0c;無法開啟調試模式。網上查詢了一下資料&#xff0c;發現需要做如下修改即可開啟調試模式。 如圖所示&#xff0c;把里面的選項&#xff0c;都放棄勾選…

SQLPro Studio:數據庫管理的革命性工具 mac版

SQLPro Studio是一款強大的數據庫管理和開發工具&#xff0c;它旨在提供高效、便捷和安全的數據庫操作體驗。無論是數據庫管理員、開發人員還是數據分析師&#xff0c;SQLPro Studio都能滿足他們在數據庫管理、查詢、設計和維護方面的需求。 SQLPro Studio mac版軟件獲取 首先…

B樹系列(詳解)

目錄 一、B-樹 二、B樹 三、B*樹 四、時間復雜度 五、Mysql與B樹系列 一、B-樹 首先再說B樹的性質以及其他的之前&#xff0c;先要說一聲&#xff0c;好多人都把這個樹叫B減樹&#xff0c;其實不是&#xff0c;他就叫B樹&#xff0c;至于原因我覺的沒必要再這個名字上糾結…