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的代码流程。

 

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