RabbitMQ源碼編譯

RabbitMQ支持多種安裝方式,如果需要分析和調試RabbitMQ源碼,則需要使用RabbitMQ源碼編譯安裝方式。

RabbitMQ是基於erlang語言編寫的,其源碼託管到github上的。Github上的二進制包可以直接用於安裝使用,而源碼壓縮包則需要經過編譯才能使用。如3.7.17版本的RabbitMQ安裝包鏈接爲:https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.7.17。這裏我們可以選擇rabbitmq-server-3.7.17.tar.xz壓縮包。該壓縮包包括RabbitMQ源碼以及所依賴的其他源碼和RabbitMQ plugins。

由於RabbitMQ在安裝時,需要依賴於erlang/OTP版本,在RabbitMQ的官方文檔中有相應的說明:https://www.rabbitmq.com/which-erlang.html

這裏,我們選擇安裝3.7.17版本的RabbitMQ,且選擇erlang版本爲22.0.6,erlang版本我們通過可以通過鏈接:http://35.244.242.82/yum/rabbitmq_erlang/el7/x86_64/獲取。我們下載安裝erlang-22.0.6-1.el7.x86_64.rpm包。

RabbitMQ的源碼編譯的步驟在RabbitMQ官方文檔有相應的鏈接:https://www.rabbitmq.com/build-server.html

下面是RabbitMQ的源碼編譯過程。這裏只有RabbitMQ的安裝過程是通過源碼編譯的,erlang這些被RabbitMQ所依賴的包直接通過rpm包(這裏使用的centos系統)進行安裝。

1 安裝erlang

[root@master rabbitmq]# yum install erlang-22.0.6-1.el7.x86_64.rpm -y

2 編譯make

由於我的linux默認安裝的make版本是3.8,在編譯RabbitMQ源碼時,需要make 4版本的要求,所以需要編譯make 4版本用於使用。

下載make 4.2版本,鏈接爲:https://ftp.gnu.org/gnu/make/

2.1 安裝gcc

[root@master rabbitmq]# yum install gcc -y

2.2 編譯make 4.2

[root@master rabbitmq]# tar -zxvf make-4.2.tar.gz
[root@master rabbitmq]# cd make-4.2
[root@master make-4.2]# ./configure
[root@master make-4.2]# make && make install

2.3 替換 make 3.8命令

[root@master make-4.2]# which make
[root@master make-4.2]# mv /usr/local/bin/make /usr/local/bin/make_bk
[root@master make-4.2]# cp make /usr/local/bin/

2.4 校驗make是否爲4.2版本

[root@master make-4.2]# make -v
GNU Make 4.2
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

3 編譯elixir

從github上下載elixir進行編譯,鏈接爲:https://github.com/elixir-lang/elixir,安裝方式可安裝以下鏈接進行:http://www.jeramysingleton.com/install-erlang-and-elixir-on-centos-7-minimal/

[root@master rabbitmq]# unzip elixir-master.zip 
[root@master rabbitmq]# mv elixir-master elixir
[root@master rabbitmq]# cp -r elixir /opt/
[root@master rabbitmq]# cd /opt/elixir
[root@master elixir]# make clean test
[root@master elixir]# ln -s /opt/elixir/bin/iex /usr/local/bin/iex
[root@master elixir]# ln -s /opt/elixir/bin/mix /usr/local/bin/mix
[root@master elixir]# ln -s /opt/elixir/bin/elixir /usr/local/bin/elixir
[root@master elixir]# ln -s /opt/elixir/bin/elixirc /usr/local/bin/elixirc

4 編譯RabbitMQ

[root@master rabbitmq]# tar -xvf rabbitmq-server-3.7.17.tar.xz
[root@master rabbitmq-server-3.7.17]# cd rabbitmq-server-3.7.17
[root@master rabbitmq-server-3.7.17]# make all

如果在編譯的過程中遇到錯誤,一般都是缺少command或者pkg,這時需要安裝相應版本的command或者pkg後再進行編譯。

5 校驗RabbitMQ

在RabbitMQ編譯成功後,需要校驗RabbitMQ功能是否正常。

[root@master rabbitmq-server-3.7.17]# cd deps/rabbit/scripts/
[root@master scripts]# ./rabbitmq-server 

  ##  ##
  ##  ##      RabbitMQ 3.7.17. Copyright (C) 2007-2019 Pivotal Software, Inc.
  ##########  Licensed under the MPL.  See https://www.rabbitmq.com/
  ######  ##
  ##########  Logs: /var/log/rabbitmq/[email protected]
                    /var/log/rabbitmq/rabbit@master_upgrade.log

              Starting broker...
 completed with 0 plugins.

這裏啓動RabbitMQ正常,功能是否正常,我們可以通過rabbitmqctl命令校驗。執行ctrl+c,這時並不是結束RabbitMQ進程,而是讓其在後臺運行。

[root@master scripts]# ./rabbitmqctl cluster_status
Cluster status of node rabbit@master ...
[{nodes,[{disc,[rabbit@master]}]},
 {running_nodes,[rabbit@master]},
 {cluster_name,<<"rabbit@master">>},
 {partitions,[]},
 {alarms,[{rabbit@master,[]}]}]

說明RabbitMQ功能正常。下面我們開啓rabbitmq-management plugin使其能訪問RabbitMQ的界面。

[root@master rabbitmq-server-3.7.17]# make run-broker

然後開啓另外一個窗口執行下面命令:

[root@master ~]# mkdir /etc/rabbitmq
[root@master ~]# cp /tmp/rabbitmq-test-instances/rabbit/enabled_plugins /etc/rabbitmq/
[root@master ~]# cd /home/rabbitmq/rabbitmq-server-3.7.17
[root@master rabbitmq-server-3.7.17]# cp -r plugins deps/rabbit/

Ctrl+C關閉make run-broker命令,然後執行以下命令:

[root@master rabbitmq-server-3.7.17]# cd deps/rabbit/scripts/
[root@master scripts]# ./rabbitmq-server 

  ##  ##
  ##  ##      RabbitMQ 3.7.17. Copyright (C) 2007-2019 Pivotal Software, Inc.
  ##########  Licensed under the MPL.  See https://www.rabbitmq.com/
  ######  ##
  ##########  Logs: /var/log/rabbitmq/[email protected]
                    /var/log/rabbitmq/rabbit@master_upgrade.log

              Starting broker...
 completed with 32 plugins.

此時我們看到開啓32個plugins,plugins可以執行cat /etc/rabbitmq/enabled_plugins命令查看。其中這32個plugins包括rabbitmq-management plugin,所以我們能夠訪問RabbitMQ的界面,其端口爲15672 port。界面如下:

6 總結

編譯RabbitMQ源碼有助於學習分析或者開發RabbitMQ,在學習RabbitMQ代碼流程時可以通過在源碼中加入調試日誌進行分析。後續我們會介紹使用dbg調試工具分析RabbitMQ的代碼流程。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章