三、RabbitMQ安装
安裝前準(zhǔn)備
Linux版本信息:
- 發(fā)行版本:CentOS Linux release 7.5.1804 (Core)
- 內(nèi)核版本:Linux version 3.10.0-862.el7.x86_64
所需軟件:
- Erlang版本:erlang-19.3.6.12-2.el7.centos.x86_64.rpm 下載地址
- RabbitMQ版本:rabbitmq-server-3.6.16.rc.1-1.el7.noarch.rpm 下載地址
安裝Erlang
因為RabbitMQ是由Erlang語言編寫的,因此在使用RabbitMQ之前需要安裝受支持的Erlang版本,在CentOS上,Erlang包有三種常用的源
- RabbitMQ提供的被剝離的包,只提供運行RabbitMQ所需的組件,官方稱零依賴項,容易安裝,如果Erlang只是用來提供運行RabbitMQ的,推薦使用。
- Erlang官方提供的包,安裝時需要安裝依賴多,如果還需要Erlang做相關(guān)開發(fā)或運行環(huán)境,使用該包
- EPEL源提供的包,但該包版本過低,不使用該方法下載安裝
因為只是使用Erlang運行RabbitMQ,所有下面的學(xué)習(xí)使用RabbitMQ提供的包。二進(jìn)制rpm包可以從Bintray和GitHub獲得,選擇你需要相應(yīng)的版本下載。
下載完成,安裝
[hayson@localhost ~]$ rpm -ivh erlang-19.3.6.12-2.el7.centos.x86_64.rpm 警告:erlang-19.3.6.12-2.el7.centos.x86_64.rpm: 頭V4 RSA/SHA1 Signature, 密鑰 ID 6026dfca: NOKEY 準(zhǔn)備中... ################################# [100%] 正在升級/安裝...1:erlang-19.3.6.12-2.el7.centos ################################# [100%]如果提示需要相關(guān)依賴,是因為該軟件包故意不包括OpenSSL/libcrypto。需要單獨提供,最近的Erlang版本需要較新的OpenSSL版本,例如1.0.1。一般安裝了SSH后,都安裝了。我安裝的CentOS已安裝有,所以沒提示。
測試是否安裝完成,輸入下面命令
[hayson@localhost ~]$ erl Erlang/OTP 19 [erts-8.3.5.6] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false] Eshell V8.3.5.6 (abort with ^G) 1>進(jìn)入了Eshell,說明安裝完成并正確啟動,輸出了Erlang的版本號、Eshell版本號等信息。
退出Eshell輸入halt().。
使用了RabbitMQ提供Erlang的rpm包,方便快捷地安裝Erlang,省略了Erlang官方提供的源碼編譯和環(huán)境變量設(shè)置。
安裝RabbitMQ
官方文檔提供多種安裝方法,本人下載rpm軟件包并手動安裝。RabbitMQ軟件包可以從Github選擇版本下載。
安裝RabbitMQ
[hayson@localhost ~]$ sudo rpm -ivh rabbitmq-server-3.6.16.rc.1-1.el7.noarch.rpm [sudo] hayson 的密碼: 警告:rabbitmq-server-3.6.16.rc.1-1.el7.noarch.rpm: 頭V4 RSA/SHA1 Signature, 密鑰 ID 6026dfca: NOKEY 錯誤:依賴檢測失敗:socat 被 rabbitmq-server-3.6.16~rc.1-1.el7.noarch 需要安裝時提示缺少socat依賴,如果CentOS不能聯(lián)網(wǎng),可以通過該站點下載socat包進(jìn)行安裝。我這里直接yum下載
查看倉庫中是否有socat
[hayson@localhost ~]$ yum list | grep socat socat.x86_64 1.7.3.2-2.el7 base安裝socat
[hayson@localhost ~]$ yum install socat重新安裝RabbitMQ
[hayson@localhost ~]$ sudo rpm -ivh rabbitmq-server-3.6.16.rc.1-1.el7.noarch.rpm 準(zhǔn)備中... ################################# [100%] 正在升級/安裝...1:rabbitmq-server-3.6.16~rc.1-1.el7################################# [100%]RabbitMQ安裝成功
啟動RabbitMQ
[hayson@localhost ~]$ sudo rabbitmq-serverRabbitMQ 3.6.16-rc.1. Copyright (C) 2007-2018 Pivotal Software, Inc.## ## Licensed under the MPL. See http://www.rabbitmq.com/## ############ Logs: /var/log/rabbitmq/rabbit@localhost.log###### ## /var/log/rabbitmq/rabbit@localhost-sasl.log##########Starting broker...completed with 0 plugins.可以看到RAbbitMQ啟動成功,并輸出RabbitMQ版本、日志路徑和開啟插件數(shù)(安裝默認(rèn)不開啟),Ctrl+C停止運行。
systemd使用
使用rpm包安裝RabbitMQ的好處是,安裝后默認(rèn)配好了快捷啟動、停止、運行狀態(tài)、失敗重啟等設(shè)置的systemd。
RabbitMQ運行
啟動RabbitMQ
[hayson@localhost ~]$ sudo systemctl start rabbitmq-server停止RabbitMQ
[hayson@localhost ~]$ sudo systemctl stop rabbitmq-server查看RabbitMQ狀態(tài)
[hayson@localhost ~]$ sudo systemctl status rabbitmq-server設(shè)置開機(jī)系統(tǒng)引導(dǎo)時,運行RabbitMQ
開啟
[hayson@localhost ~]$ sudo 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.關(guān)閉
[hayson@localhost ~]$ sudo systemctl disable rabbitmq-server Removed symlink /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service.查看狀態(tài)
[hayson@localhost ~]$ sudo systemctl is-enabled rabbitmq-server disabled
RabbitMQ參數(shù)設(shè)置
RabbitMQ帶有默認(rèn)的內(nèi)置設(shè)置。在某些環(huán)境(例如開發(fā)和QA)中,這些可能完全足夠。對于所有其他情況以及生產(chǎn)部署調(diào)優(yōu),我們需要配置一些參數(shù)區(qū)分于默認(rèn)的配置。
比如rabbitmq的默認(rèn)端口是5672,如何去修改端口5672為5673呢?
RabbitMQ提供了三種自定義服務(wù)器的通用方法:
配置文件
以修改RabbitMQ默認(rèn)端口5672為例。修改端口5672為5673
默認(rèn)配置文件(強(qiáng)烈不推薦修改默認(rèn)配置文件)
RabbitMQ的默認(rèn)配置文件是RabbitMQ的內(nèi)置默認(rèn)值,不建議修改,位于/usr/lib/rabbitmq/lib/rabbitmq_server-3.6.16-rc.1/ebin下,打開文件
[hayson@localhost ~]$ sudo vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.16-rc.1/ebin/rabbit.app可以看到如下內(nèi)容(這里截取部分)
{env, [{tcp_listeners, [5672]},{default_user, <<"guest">>},{default_pass, <<"guest">>},{default_user_tags, [administrator]},{default_vhost, <<"/">>},{default_permissions, [<<".*">>, <<".*">>, <<".*">>]},{loopback_users, [<<"guest">>]},上面部分顯示的配置為:當(dāng)前RabbitMQ的端口號5672,默認(rèn)用戶和密碼都為guest,身份為管理員,默認(rèn)虛擬主機(jī)為/,權(quán)限為擁有所有權(quán)限,登錄權(quán)限只能localhost或127.0.0.1。如果要修改端口5672為5673,則只需把5672改為5673。其他修改用戶名或密碼把原來修改即可。
自定義配置文件
通過查看服務(wù)狀態(tài)
[hayson@localhost ~]$ sudo systemctl status rabbitmq-server可以看到Logs文件位置,打開該文件位置日志文件
[hayson@localhost ~]$ cat /var/log/rabbitmq/rabbit@localhost.log這里顯示的是沒有找到配置文件,我們可以自己創(chuàng)建這個文件
[hayson@localhost ~]$ sudo vim /etc/rabbitmq/rabbitmq.config寫入如下內(nèi)容
[{rabbit, [{tcp_listeners,[5673]}]} ].保存配置后重啟服務(wù)
[hayson@localhost ~]$ sudo systemctl stop rabbitmq-server [hayson@localhost ~]$ sudo systemctl start rabbitmq-server
官網(wǎng)提供了一份rabbitmq.config示列,此示例文件包含設(shè)置的大多數(shù)配置項(省略一些非常模糊的配置)以及這些設(shè)置的文檔的示例。 所有配置項都在示例中注釋掉,因此您可以取消注釋所需的內(nèi)容。請注意,不要將其當(dāng)作一般的推薦配置。
開啟web界面管理插件
安裝RabbitMQ后,默認(rèn)不開啟任何插件的,需要我們手動去開啟,管理插件的命令為rabbitmq-plugins,可以先查看該命令用法
rabbitmq-plugins用法
[hayson@localhost ~]$ sudo rabbitmq-plugins Usage: rabbitmq-plugins [-n <node>] <command> [<command options>] Commands:list [-v] [-m] [-E] [-e] [<pattern>]enable [--offline] [--online] <plugin> ...disable [--offline] [--online] <plugin> ...set [--offline] [--online] <plugin> ...查看RabbitMQ所有可開啟插件
[hayson@localhost ~]$ sudo rabbitmq-plugins listConfigured: E = explicitly enabled; e = implicitly enabled| Status: * = running on rabbit@localhost|/ [ ] amqp_client 3.6.16-rc.1 [ ] cowboy 1.0.4 [ ] cowlib 1.0.2 [ ] rabbitmq_amqp1_0 3.6.16-rc.1 [ ] rabbitmq_auth_backend_ldap 3.6.16-rc.1 [ ] rabbitmq_auth_mechanism_ssl 3.6.16-rc.1 [ ] rabbitmq_consistent_hash_exchange 3.6.16-rc.1 [ ] rabbitmq_event_exchange 3.6.16-rc.1 [ ] rabbitmq_federation 3.6.16-rc.1 [ ] rabbitmq_federation_management 3.6.16-rc.1 [ ] rabbitmq_jms_topic_exchange 3.6.16-rc.1 [ ] rabbitmq_management 3.6.16-rc.1 [ ] rabbitmq_management_agent 3.6.16-rc.1 [ ] rabbitmq_management_visualiser 3.6.16-rc.1 [ ] rabbitmq_mqtt 3.6.16-rc.1 [ ] rabbitmq_random_exchange 3.6.16-rc.1 [ ] rabbitmq_recent_history_exchange 3.6.16-rc.1 [ ] rabbitmq_sharding 3.6.16-rc.1 [ ] rabbitmq_shovel 3.6.16-rc.1 [ ] rabbitmq_shovel_management 3.6.16-rc.1 [ ] rabbitmq_stomp 3.6.16-rc.1 [ ] rabbitmq_top 3.6.16-rc.1 [ ] rabbitmq_tracing 3.6.16-rc.1 [ ] rabbitmq_trust_store 3.6.16-rc.1 [ ] rabbitmq_web_dispatch 3.6.16-rc.1 [ ] rabbitmq_web_mqtt 3.6.16-rc.1 [ ] rabbitmq_web_mqtt_examples 3.6.16-rc.1 [ ] rabbitmq_web_stomp 3.6.16-rc.1 [ ] rabbitmq_web_stomp_examples 3.6.16-rc.1 [ ] sockjs 0.3.4上面命令列出了RabbitMQ所有的插件,前面的中括號[ ]表示空為沒有開啟,其中rabbitmq_management是web界面管理插件
開啟rabbitmq_management插件
[hayson@localhost ~]$ sudo rabbitmq-plugins enable rabbitmq_management The following plugins have been enabled:amqp_clientcowlibcowboyrabbitmq_web_dispatchrabbitmq_management_agentrabbitmq_managementApplying plugin configuration to rabbit@localhost... started 6 plugins.可以看到共開啟了6個插件。再次查看插件列表,前面中括號[ ]出現(xiàn)e*標(biāo)記表示開啟
[hayson@localhost ~]$ sudo rabbitmq-plugins listConfigured: E = explicitly enabled; e = implicitly enabled| Status: * = running on rabbit@localhost|/ [e*] amqp_client 3.6.16-rc.1 [e*] cowboy 1.0.4 [e*] cowlib 1.0.2 [ ] rabbitmq_amqp1_0 3.6.16-rc.1 [ ] rabbitmq_auth_backend_ldap 3.6.16-rc.1 [ ] rabbitmq_auth_mechanism_ssl 3.6.16-rc.1 [ ] rabbitmq_consistent_hash_exchange 3.6.16-rc.1 [ ] rabbitmq_event_exchange 3.6.16-rc.1 [ ] rabbitmq_federation 3.6.16-rc.1 [ ] rabbitmq_federation_management 3.6.16-rc.1 [ ] rabbitmq_jms_topic_exchange 3.6.16-rc.1 [E*] rabbitmq_management 3.6.16-rc.1 [e*] rabbitmq_management_agent 3.6.16-rc.1 [ ] rabbitmq_management_visualiser 3.6.16-rc.1 [ ] rabbitmq_mqtt 3.6.16-rc.1 [ ] rabbitmq_random_exchange 3.6.16-rc.1 [ ] rabbitmq_recent_history_exchange 3.6.16-rc.1 [ ] rabbitmq_sharding 3.6.16-rc.1 [ ] rabbitmq_shovel 3.6.16-rc.1 [ ] rabbitmq_shovel_management 3.6.16-rc.1 [ ] rabbitmq_stomp 3.6.16-rc.1 [ ] rabbitmq_top 3.6.16-rc.1 [ ] rabbitmq_tracing 3.6.16-rc.1 [ ] rabbitmq_trust_store 3.6.16-rc.1 [e*] rabbitmq_web_dispatch 3.6.16-rc.1 [ ] rabbitmq_web_mqtt 3.6.16-rc.1 [ ] rabbitmq_web_mqtt_examples 3.6.16-rc.1 [ ] rabbitmq_web_stomp 3.6.16-rc.1 [ ] rabbitmq_web_stomp_examples 3.6.16-rc.1 [ ] sockjs 0.3.4開啟插件后,通過以下命令可以查看到RabbitMQ所有監(jiān)聽的端口
[hayson@localhost ~]$ sudo rabbitmqctl status | grep listeners{listeners,[{clustering,25672,"::"},{amqp,5672,"::"},{http,15672,"::"}]},以上可以看到第三個的端口15672,這是rabbitmq_management插件監(jiān)聽的端口
也可以通過端口查看
[hayson@localhost ~]$ sudo lsof -i:5672 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME beam 39771 rabbitmq 51u IPv6 143492 0t0 TCP *:amqp (LISTEN) [hayson@localhost ~]$ sudo lsof -i:15672 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME beam 39771 rabbitmq 52u IPv4 143497 0t0 TCP *:15672 (LISTEN)配置防火墻端口
開啟rabbitmq-management后,要讓外部瀏覽器進(jìn)行訪問,需要防火墻端口放行
[hayson@localhost ~]$ sudo firewall-cmd --zone=public --add-port=15672/tcp --permanent [hayson@localhost ~]$ sudo firewall-cmd --zone=public --add-port=5672/tcp --permanent [hayson@localhost ~]$ sudo firewall-cmd --zone=public --add-port=5672/tcp --permanent [hayson@localhost ~]$ sudo firewall-cmd --reload上面順便把RabbitMQ目前所有監(jiān)聽的端口都放行了,瀏覽器訪問WEB管理頁面可以只放行15672。
在瀏覽器中輸入服務(wù)器IP:15672 就可以看到RabbitMQ的WEB管理臺。
登錄WEB管理臺
默認(rèn)用戶guest登錄(不推薦)
guest默認(rèn)vhost為"/",具有"/"上的全部權(quán)限,僅能有l(wèi)ocalhost訪問RabbitMQ包括Plugin,建議刪除或更改密碼。可通過將配置文件中l(wèi)oopback_users置空來取消其本地訪問的限制。可以通過修改默認(rèn)配置文件rabbit.app或自定義配置文件rabbitmq.config進(jìn)行配置外網(wǎng)訪問
修改默認(rèn)配置文件(強(qiáng)烈不推薦使用)
RabbitMQ的默認(rèn)配置文件位于/usr/lib/rabbitmq/lib/rabbitmq_server-3.6.16-rc.1/ebin下
[hayson@localhost ~]$ sudo vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.16-rc.1/ebin/rabbit.app在命令行模式下輸入/loopback找到該行
{loopback_users, [<<"guest">>]},把中括號[]設(shè)為空
{loopback_users, []},保存退出,重啟生效后,可以使用guest賬號密碼登錄
自定義配置文件
[hayson@localhost ~]$ sudo vim /etc/rabbitmq/rabbitmq.config寫入如下內(nèi)容
[{rabbit, [{loopback_users,[]}]} ].保存后,重啟RabbitMQ,可以在瀏覽器通過默認(rèn)用戶guest登錄。
創(chuàng)建用戶登錄(推薦)
默認(rèn)情況下,訪問RabbitMQ服務(wù)的用戶名和密碼都是guest,這個賬戶有限制,默認(rèn)只能通過本地網(wǎng)絡(luò)(如localhost)訪問,遠(yuǎn)程網(wǎng)絡(luò)訪問受限,通過配置可以設(shè)置外網(wǎng)訪問,但不推薦。所以需要另外創(chuàng)建一個用戶
創(chuàng)建用戶
[hayson@localhost rabbitmq]$ rabbitmqctl add_user admin admin Creating user "admin"為用戶設(shè)置權(quán)限
設(shè)置用戶admin訪問名為“/(所有)”的虛擬主機(jī),并對所有.*(正則)的資源具有配置權(quán)限,并對所有資源執(zhí)行寫入.*(正則)和讀取.*(正則)權(quán)限資源:
[hayson@localhost rabbitmq]$ rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" Setting permissions for user "admin" in vhost "/"設(shè)置用戶為管理員角色
[hayson@localhost rabbitmq]$ rabbitmqctl set_user_tags admin administrator Setting tags for user "admin" to [administrator]查看RabbitMQ用戶
[hayson@localhost rabbitmq]$ rabbitmqctl list_users Listing users admin [administrator] guest [administrator]可以看到用戶admin為管理員權(quán)限,重啟RabbitMQ,可以在瀏覽器通過默認(rèn)用戶admin登錄。
RabbitMQ用戶角色及權(quán)限控制
RabbitMQ用戶角色分類:
none
不能訪問management plugin
management
用戶可以通過AMQP做的任何事外加:
- 列出自己可以通過AMQP登入的virtual hosts
- 查看自己的virtual hosts中的queues, exchanges 和 bindings
- 查看和關(guān)閉自己的channels 和 connections
- 查看有關(guān)自己的virtual hosts的“全局”的統(tǒng)計信息,包含其他用戶在這些virtual hosts中的活動。
policymaker
management可以做的任何事外加:
- 查看、創(chuàng)建和刪除自己的virtual hosts所屬的policies和parameters
monitoring
management可以做的任何事外加:
- 列出所有virtual hosts,包括他們不能登錄的virtual hosts
- 查看其他用戶的connections和channels
- 查看節(jié)點級別的數(shù)據(jù)如clustering和memory使用情況
- 查看真正的關(guān)于所有virtual hosts的全局的統(tǒng)計信息
administrator
policymaker和monitoring可以做的任何事外加:
- 創(chuàng)建和刪除virtual hosts
- 查看、創(chuàng)建和刪除users
- 查看創(chuàng)建和刪除permissions
- 關(guān)閉其他用戶的connections
創(chuàng)建用戶并設(shè)置角色:
可以創(chuàng)建管理員用戶,負(fù)責(zé)整個MQ的運維,例如:
[hayson@localhost ~]$ sudo rabbitmqctl add_user user_admin passwd_admin賦予其administrator角色:
[hayson@localhost ~]$ sudo rabbitmqctl set_user_tags user_admin administrator可以創(chuàng)建RabbitMQ監(jiān)控用戶,負(fù)責(zé)整個MQ的監(jiān)控,例如:
[hayson@localhost ~]$ sudo rabbitmqctl add_user user_monitoring passwd_monitor賦予其monitoring角色:
[hayson@localhost ~]$ sudo rabbitmqctl set_user_tags user_monitoring monitoring可以創(chuàng)建某個項目的專用用戶,只能訪問項目自己的virtual hosts
[hayson@localhost ~]$ sudo rabbitmqctl add_user user_proj passwd_proj賦予其monitoring角色:
[hayson@localhost ~]$ sudo rabbitmqctl set_user_tags user_proj management
創(chuàng)建和賦角色完成后查看并確認(rèn):
[hayson@localhost ~]$ sudo rabbitmqctl list_usersRabbitMQ權(quán)限控制
默認(rèn)virtual host:"/"
默認(rèn)用戶:guest
guest具有"/"上的全部權(quán)限,僅能有l(wèi)ocalhost訪問RabbitMQ包括Plugin,建議刪除或更改密碼。可通過將配置文件中l(wèi)oopback_users置孔來取消其本地訪問的限制:
[{rabbit, [{loopback_users, []}]}]
用戶僅能對其所能訪問的virtual hosts中的資源進(jìn)行操作。這里的資源指的是virtual hosts中的exchanges、queues等,操作包括對資源進(jìn)行配置、寫、讀。配置權(quán)限可創(chuàng)建、刪除、資源并修改資源的行為,寫權(quán)限可向資源發(fā)送消息,讀權(quán)限從資源獲取消息。比如:
exchange和queue的declare與delete分別需要exchange和queue上的配置權(quán)限
exchange的bind與unbind需要exchange的讀寫權(quán)限
queue的bind與unbind需要queue寫權(quán)限、exchange的讀權(quán)限
發(fā)消息(publish)需exchange的寫權(quán)限
獲取或清除(get、consume、purge)消息需queue的讀權(quán)限
對何種資源具有配置、寫、讀的權(quán)限通過正則表達(dá)式來匹配,具體命令如下:
set_permissions [-p <vhostpath>] <user> <conf> <write> <read>其中,<conf> <write> <read>的位置分別用正則表達(dá)式來匹配特定的資源。
需要注意的是RabbitMQ會緩存每個connection或channel的權(quán)限驗證結(jié)果、因此權(quán)限發(fā)生變化后需要重連才能生效。
為用戶賦權(quán):
$sudo rabbitmqctl set_permissions -p /vhost1 user_admin '.*' '.*' '.*'該命令使用戶user_admin具有/vhost1這個virtual host中所有資源的配置、寫、讀權(quán)限以便管理其中的資源
查看權(quán)限:
$sudo rabbitmqctl list_user_permissions user_admin轉(zhuǎn)載于:https://www.cnblogs.com/zenghi-home/p/9961997.html
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的三、RabbitMQ安装的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 根据内容来产生一个二维码
- 下一篇: TCP 传输控制协议(转)