RabbitMQ簡介
在搭建RabbitMQ之前實現要介紹一下MQ,MQ是什么?
MQ全稱是Message Queue,可以理解為消息隊列的意思,簡單來說就是消息以管道的方式進行傳遞
RabbitMQ是一個實現了AMQP(Advanced Message Queuing Protocol)高級消息隊列協議的消息隊列服務,用Erlang語言的
RabbitMQ有成千上萬的用戶,是最受歡迎的開源消息代理之一。從T-Mobile到Runtastic,RabbitMQ在全球范圍內的小型初創企業和大型企業中都得到使用
RabbitMQ輕巧,易於在內部和雲中部署。它支持多種消息傳遞協議。RabbitMQ可以部署在分布式和聯合配置中,以滿足大規模,高可用性的要求
RabbitMQ可在許多操作系統和雲環境上運行,並為大多數流行語言提供了廣泛的開發人員工具
RabbitMQ環境版本
jdk | erlang | rabbitmq |
1.8 | 23.1 | 3.8.9 |
下載JDK1.8並且安裝
[root@Mike-Node1 ~]# wget https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz [root@Mike-Node1 ~]# tar zxvf jdk-8u202-linux-x64.tar.gz -C /usr/local/ && rm -rf jdk-8u202-linux-x64.tar.gz [root@Mike-Node1 ~]# mv /usr/local/jdk1.8.0_202/ /usr/local/jdk/ [root@Mike-Node1 ~]# vim /etc/profile #set java environment JAVA_HOME=/usr/local/jdk CLASSPATH=.:$JAVA_HOME/lib.tools.jar PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME CLASSPATH PATH [root@Mike-Node1 ~]# source /etc/profile [root@Mike-Node1 ~]# [root@Mike-Node1 ~]# java -version java version "1.8.0_202" Java(TM) SE Runtime Environment (build 1.8.0_202-b08) Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode) [root@Mike-Node1 ~]#
jdk1.8到此安裝完成,只要 java -version 出來版本號就可以
安裝依賴包
[root@Mike-Node1 ~]# yum install -y gcc gcc-c++ glibc-devel make ncurses-devel openssl-devel autoconf
安裝Erlang
下表提供了當前支持的RabbitMQ版本系列的Erlang兼容性列表。對於已到期的RabbitMQ版本,請參閱
最低要求的Erlang / OTP | 最大支持的Erlang / OTP | 筆記 | |
---|---|---|---|
3.8.9 | 22.3 | 23.x |
[root@Mike-Node1 ~]# mkdir /data && cd /data [root@Mike-Node1 /data]# [root@Mike-Node1 /data]# wget http://erlang.org/download/otp_src_23.1.tar.gz [root@Mike-Node1 /data]# tar zxvf otp_src_23.1.tar.gz [root@Mike-Node1 /data]# cd otp_src_23.1 [root@Mike-Node1 /data/otp_src_23.1]# [root@Mike-Node1 /data/otp_src_23.1]# ./otp_build autoconf [root@Mike-Node1 /data/otp_src_23.1]# ./configure && make && make install [root@Mike-Node1 /data/otp_src_23.1]# cd [root@Mike-Node1 ~]# [root@Mike-Node1 ~]# erl Erlang/OTP 23 [erts-11.1] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [hipe] Eshell V11.1 (abort with ^G) 1> [root@Mike-Node1 ~]#
進入erlang命令行表示安裝成功
安裝Socat
[root@Mike-Node1 ~]# yum install -y socat
安裝RabbitMQ
[root@Mike-Node1 ~]# rpm -Uvh https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.9/rabbitmq-server-3.8.9-1.el7.noarch.rpm --nodeps Retrieving https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.9/rabbitmq-server-3.8.9-1.el7.noarch.rpm warning: /var/tmp/rpm-tmp.WZYQYx: Header V4 RSA/SHA256 Signature, key ID 6026dfca: NOKEY Preparing... ################################# [100%] Updating / installing... 1:rabbitmq-server-3.8.9-1.el7 ################################# [100%] [root@Mike-Node1 ~]#
如果遇到erlang已安裝且版本正確,但是RabbitMQ檢測失敗的情況
可以追加參數 —nodeps (不驗證軟件包依賴)
啟動RabbitMQ
[root@Mike-Node1 ~]# systemctl enable rabbitmq-server Created symlink from /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service to /usr/lib/systemd/system/rabbitmq-server.service. [root@Mike-Node1 ~]# [root@Mike-Node1 ~]# systemctl start rabbitmq-server [root@Mike-Node1 ~]# systemctl status rabbitmq-server
Web插件安裝
[root@Mike-Node1 ~]# rabbitmq-plugins enable rabbitmq_management Enabling plugins on node rabbit@Mike-Node1: rabbitmq_management The following plugins have been configured: rabbitmq_management rabbitmq_management_agent rabbitmq_web_dispatch Applying plugin configuration to rabbit@Mike-Node1... The following plugins have been enabled: rabbitmq_management rabbitmq_management_agent rabbitmq_web_dispatch started 3 plugins. [root@Mike-Node1 ~]#
配置用戶遠程
[root@Mike-Node1 ~]# vi /etc/rabbitmq/rabbitmq.config [ {loopback_users, []} ]. [root@Mike-Node1 ~]#
修改默認配置文件路徑
rabbitmq默認數據目錄和日志路徑
默認數據目錄 /var/lib/rabbitmq/mnesia
日志路徑 /var/log/rabbitmq/
配置文件路徑 /etc/rabbitmq/
創建新的數據文件和日志文件目錄並給權限
[root@Mike-Node1 ~]# mkdir -p /data/rabbitmq/log [root@Mike-Node1 ~]# mkdir -p /data/rabbitmq/mnesia [root@Mike-Node1 ~]# chmod -R 755 /data/rabbitmq [root@Mike-Node1 ~]# chown -R rabbitmq:rabbitmq /data/rabbitmq
創建或者新增環境參數配置文件
[root@Mike-Node1 ~]# vim /etc/rabbitmq/rabbitmq-env.conf RABBITMQ_MNESIA_BASE=/data/rabbitmq/mnesia RABBITMQ_LOG_BASE=/data/rabbitmq/log [root@Mike-Node1 ~]#
重啟RabbitMQ
[root@Mike-Node1 ~]# systemctl restart rabbitmq-server
開放防火牆端口
####firewalld防火牆 [root@Mike-Node1 ~]# firewall-cmd --zone=public --add-port=5672/tcp --permanent [root@Mike-Node1 ~]# firewall-cmd --zone=public --add-port=15672/tcp --permanent [root@Mike-Node1 ~]# firewall-cmd --reload ####iptables防火牆 [root@Mike-Node1 ~]# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 5672 -j ACCEPT [root@Mike-Node1 ~]# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 15672 -j ACCEPT [root@Mike-Node1 ~]# systemctl restart iptables
訪問管理頁面
http://IP:15672
賬號和密碼默認都是guest
創建管理用戶
#添加用戶(用戶admin,密碼admin) [root@Mike-Node1 ~]# rabbitmqctl add_user admin admin Adding user "admin" ... #設置用戶角色(admin為管理員) [root@Mike-Node1 ~]# rabbitmqctl set_user_tags admin administrator Setting tags for user "admin" to [administrator] ... #設置用戶權限(接受來自所有Host的所有操作) [root@Mike-Node1 ~]# rabbitmqctl set_permissions -p "/" admin '.*' '.*' '.*' Setting permissions for user "admin" in vhost "/" ... #查看用戶權限 [root@Mike-Node1 ~]# rabbitmqctl list_user_permissions admin Listing permissions for user "admin" ... vhost configure write read / .* .* .* [root@Mike-Node1 ~]#
然后使用 admin 管理員用戶登錄web管理頁面
用戶和密碼是上面添加設置的 admin admin
RabbitMQ常用命令
# 添加用戶 rabbitmqctl add_user <username> <password> # 刪除用戶 rabbitmqctl delete_user <username> # 修改用戶密碼 rabbitmqctl change_password <username> <newpassword> # 清除用戶密碼(該用戶將不能使用密碼登陸,但是可以通過SASL登陸如果配置了SASL認證) rabbitmqctl clear_password <username> # 設置用戶tags(相當於角色,包含administrator,monitoring,policymaker,management) rabbitmqctl set_user_tags <username> <tag> # 列出所有用戶 rabbitmqctl list_users # 創建一個vhosts rabbitmqctl add_vhost <vhostpath> # 刪除一個vhosts rabbitmqctl delete_vhost <vhostpath> # 列出vhosts rabbitmqctl list_vhosts [<vhostinfoitem> ...] # 針對一個vhosts給用戶賦予相關權限; rabbitmqctl set_permissions [-p <vhostpath>] <user> <conf> <write> <read> # 清除一個用戶對vhosts的權限; rabbitmqctl clear_permissions [-p <vhostpath>] <username> # 列出哪些用戶可以訪問該vhosts; rabbitmqctl list_permissions [-p <vhostpath>] # 列出用戶訪問權限; rabbitmqctl list_user_permissions <username>
本文分享完畢,感謝支持點贊~~