RabbitMQ:3.8 erlang:22.2
之前使用過RabbitMQ進(jìn)行開發(fā),但是從來沒有正經(jīng)的安裝過痴荐。
在本地電腦呢,就使用windows版本的RabbitMQ安裝包难捌,而在生產(chǎn)環(huán)境呢鸦难,運(yùn)維已經(jīng)幫我們搭建好了,所以啥事無用操心击敌。
一切都是風(fēng)平浪靜的模樣拴事,知道我想要深入了解RabbitMQ的時(shí)候,才發(fā)現(xiàn)我都沒有再Linux上安裝過轰枝,那么談何學(xué)習(xí)hello world组去,世界的美好我看不到啊。于是呢从隆,我就開啟了一段自虐的過程。
我知道安裝RabbitMQ的先決條件是安裝erlang,哈哈寿烟,你騙不了我辛燥,于是速速的從官網(wǎng)下載了22.2版本的erlang,基本上是最新版本的徘六。照著百度給出的安裝步驟榴都,就順利安裝好了。命令行輸入erl,出現(xiàn)了版本號等信息竿音,鍵入halt().退出了erlang的控制臺(tái)。至此呢春瞬,一切很美好快鱼。整個(gè)步驟可以簡要描述如下:
在erlang官網(wǎng)下載最新的tar.gz(22.2),解壓,進(jìn)入目錄:
./configure --prefix=/usr/local/erlang
make && make install
編輯 /etc/profile,最下行添加:
ERLANG_HOME=/usr/local/erlang
export PATH=$PATH:$ERLANG_HOME/bin
export ERLANG_HOME
然后執(zhí)行 source /etc/profile
驗(yàn)證:任意目錄 erl,回車
halt(). 退出
接下來看了一下版本對應(yīng)的問題线罕,最新的RabbitMQ是3.8窃判,跟erlang的版本是匹配的,這一點(diǎn)可以從RabbitMQ的官網(wǎng)去查看询件。下載了一個(gè)適用于CentOS的RabbitMQ rpm包唆樊,進(jìn)行安裝,于是就蹦出了一個(gè)錯(cuò)誤:
Error: Package: rabbitmq-server-3.8.3-1.el7.noarch (/rabbitmq-server-3.8.3-1.el7.noarch)
Requires: erlang >= 21.3
Available: erlang-R16B-03.18.el7.x86_64 (epel)
erlang = R16B-03.18.el7
You could try using --skip-broken to work around the problem
** Found 1 pre-existing rpmdb problem(s), 'yum check' output follows:
redhat-lsb-core-4.1-27.el7.centos.1.x86_64 has missing requires of /usr/sbin/sendmail
起初懷疑redhat-lsb-core-4.1-27.el7.centos.1.x86_64 這個(gè)沒有安裝嘿辟,一查看發(fā)現(xiàn)已經(jīng)是最新版本的了片效。選擇--skip-broken進(jìn)行rpm進(jìn)行安裝,依然報(bào)錯(cuò)昙读。于是開始了長達(dá)4個(gè)小時(shí)的百度搜索之旅膨桥,逐漸發(fā)現(xiàn)yum這個(gè)命令以及背后的邏輯有點(diǎn)復(fù)雜,類似于maven陵吸,管理所需依賴介牙。但是為啥我安裝了最新版本的依賴澳厢,依舊是提示我erlang版本太低囚似。根據(jù)我的百度搜索結(jié)果线得,大概是說有一個(gè)倉庫是由社區(qū)維護(hù)的,但是里面放入的erlang都太老了募狂。當(dāng)yum安裝RabbitMQ角雷,它分析出需要erlang依賴,于是就去找倉庫中的可用erlang列表雷滚,發(fā)現(xiàn)找了一圈吗坚,全是低版本的,于是直接不干了车份,拋出錯(cuò)誤牡彻。那是不是改成阿里云的鏡像倉庫就好了呢,我發(fā)現(xiàn)配置里面充甚,幾個(gè)源都是阿里云的霸褒,說白了阿里云也只是定期同步國外的倉庫,不會(huì)自作聰明的加入新版本技矮。于是呢又去RabbitMQ的官網(wǎng)查看Package Cloud或者Bintray這種安裝方式殊轴,從頭到尾看了一遍,原諒我的英文不好樊零,單詞意思明白了,內(nèi)在邏輯一塌糊涂驻襟。沒有列表或者之類沉衣,讓我分不清哪個(gè)對哪個(gè)有用,哪些我不用考慮豌习,總之肥隆,這條路在進(jìn)行了簡單的嘗試之后,走不通巷屿。
接下來的百度中,我發(fā)現(xiàn)可以使用rpm -ivh --nodeps這種方式進(jìn)行安裝憨琳,意思是忽略依賴旬昭,依賴自己搞定问拘,我看官網(wǎng)就依賴三種東西,而我都安裝好了骤坐。嗯哼纽绍,安裝倒是沒問題,啟動(dòng)RabbitMQ又報(bào)錯(cuò)了:
Redirecting to /bin/systemctl start rabbitmq-server.service
Job for rabbitmq-server.service failed because the control process exited with error code. See "systemctl status rabbitmq-server.service" and "journalctl -xe" for details.
?/usr/lib/systemd/system/rabbitmq-server.service; disabled; vendor preset: disabled
結(jié)合百度的說法僧著,可以自己設(shè)置yum的源障簿,添加.repo之類的東西,寫進(jìn)去一些配置皆怕,反正實(shí)驗(yàn)了幾次,不對頭端逼。
我陷入了深深的懷疑之中顶滩,不就是一個(gè)mq嗎寸爆,這種東西應(yīng)該很容易安裝,為什么會(huì)出現(xiàn)感覺好難的樣子仅醇。那之前運(yùn)維的人為什么沒有覺得這個(gè)難裝呢魔种?我可以懷疑那時(shí)候RabbitMQ版本還不是太高,erlang勉強(qiáng)還能夠匹配當(dāng)前的版本叶摄,比如3.6之類的“材猓現(xiàn)在,可是另一番景象了会傲。我不相信官網(wǎng)只提供rpm格式拙泽,不提供tar格式。于是繼續(xù)在官網(wǎng)中去尋找泼疑,結(jié)果朋其,真的有tar格式的。這下子我明白我的錯(cuò)誤了氓辣,以為首頁所展示的安裝和下載袱蚓,就是最適合的安裝和下載。這種想法是不對的体斩。下載網(wǎng)址:https://www.rabbitmq.com/install-generic-unix.html
接下來順利多了解壓,啟動(dòng)弧烤。我先前臺(tái)啟動(dòng)蹬敲,關(guān)閉試著后臺(tái)啟動(dòng),但爆了一個(gè)錯(cuò)誤:
init terminating in do_boot
按照咱們偉大的百度的說法急波,應(yīng)該是要?jiǎng)h除RabbitMQ_HOME/var目錄子啊的所有文件瘪校,我照著做一遍,真的是泣懊。感謝百度价认。
現(xiàn)在能夠順利啟動(dòng),但我想通過端口15672訪問控制臺(tái)怎么辦呢渠退?先把阿里云上的端口15672 5672端口開放脐彩,linux的防火墻也開放這兩個(gè)端口惠奸。然后還需要啟動(dòng)管理插件:./sbin/rabbitmq-plugins enable rabbitmq_management
意外喲,出現(xiàn)了錯(cuò)誤:
corrupt_or_missing_cluster_files
我沒有弄集群梗掰,這個(gè)不科學(xué)嗅回。本著不行就重啟的思路,我關(guān)閉了mq,然后開啟插件埂陆,然后啟動(dòng),一切ok焚虱【樵裕看來這個(gè)插件啟用不能再開了mq之后啊。
現(xiàn)在訪問管理頁面:http://{node-hostname}:15672/
出現(xiàn)了頁面:
我發(fā)現(xiàn)RabbitMQ提供了一個(gè)guest/guest的賬戶禾锤,但是呢摹察,它是不允許遠(yuǎn)程訪問的供嚎。那么峭状,只好自己配置用戶了。
列出所有用戶: ./rabbitmqctl list_users
添加用戶: ./rabbitmqctl add_user 用戶名 密碼
刪除用戶: ./rabbitmqctl delete_user 用戶名
授予用戶管理員角色:./rabbitmqctl set_user_tags 用戶名 administrator
給用戶分配 配置 讀 寫 等權(quán)利:./rabbitmqctl set_permissions -p / 用戶名 '.*' '.*' '.*'
經(jīng)過了這幾部劝赔,再次登錄胆敞,就進(jìn)入了管理頁面着帽。
感慨:所謂工作經(jīng)驗(yàn),不是你用到了什么高大上的技術(shù)移层,而是仍翰,你走過了很多坑,然后观话,就可以在接下來的時(shí)間少走很多彎路予借。這個(gè)mq安裝最多半小時(shí),愣是被我弄成了一天频蛔,這個(gè)效率灵迫。。晦溪。