前言
erlang是一門面向並發的編程語言,流行的消息隊列rabbitMQ是基於erlang環境運行的;
下載安裝erlang語言環境
源碼安裝
# 從官網下載,在任何目錄下,使用root權限
wget http://www.erlang.org/download/otp_src_20.0.tar.gz
# 解壓到習慣目錄
tar -zxvf otp_src_20.0.tar.gz -C /usr/local/
# 修改名字
mv otp_src_20.0 erlang
# 安裝erlang需要的依賴包
yum -y install gcc glibc-devel make ncurses-devel openssl openssl-devel autoconf gcc-c++ kernel-devel m4 unixODBC unixODBC-devel wxGTK wxGTK-devel fop libxslt libxslt-devel
# 進入目錄
cd erlang
# 指定安裝的目錄和相關的配置
./configure --prefix=/usr/local/erlang --enable-gui=no --enable-threads --enable-smp-support --enable-kernel-poll --enable-native-libs --enable-hipe --without-javac
# 如果沒有報錯,或只出現沒有 wx not found和Java compiler disabled by user是正常的
make & make install
注意:
- 如果出現錯誤如“沒有目標創建XXXXX”,找到進入的目錄如果是hipe目錄,就在配置中增加:
./configure --prefix=/usr/local/erlang --enable-XXXXX # XXXX 表示報錯的目錄,一般是權限的問題;
細節
- 本人習慣將安裝文件和源文件放在一個大目錄下,如erlang,這樣當需要卸載的時候直接刪除這個目錄就行了;
apt安裝
sudo apt update
apt install erlang
測試
默認安裝的客戶端是在/usr/local/erlang/bin下的
cd /usr/local/erlang/bin
# 輸入./erl,如果出現交互界面則成功了
鏈接和環境變量
# 創建一個軟連接到系統路徑中
ln -s /usr/local/erlang/bin/erl /usr/bin/erl
rabbitMQ的安裝和使用
源碼安裝
cd /usr/local
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.10/rabbitmq-server-generic-unix-3.6.10.tar.xz
# 解壓
xz -d rabbitmq-server-generic-unix-3.6.10.tar.xz
tar -xvf rabbitmq-server-generic-unix-3.6.10.tar
# 重新命名
mv rabbitmq_server-3.6.10 rabbitmq_server
# 進入文件目錄,這已經算是安裝好的文件了
相關的使用的命令都在sbin目錄中,將sbin目錄添加到系統環境變量;
vi /etc/profile
# 在文件的末尾添加
#set rabbitmq
export PATH=$PATH:/usr/local/rabbitmq_server/sbin
配置開機自啟動
- 在/etc/rc.d/rc.local文件中加入啟動命令
vi /etc/rc.d/rc.local
# start rabbitmq
/usr/local/rabbitmq_server/sbin/rabbitmq-server -detached
reboot # 重啟測試一下
- 使用sysv-rc-conf管理
apt intsall sysv-rc-conf
vi rabbitmq.service
# start rabbitmq
/usr/local/rabbitmq_server/sbin/rabbitmq-server -detached
chmod 755 rabbitmq.service
# 將本腳本放置在/etc/init.d目錄下
sysv-rc-conf打開管理界面添加權限。
如果無法啟動可能有一下的原因:
-
可能是權限問題,你需要切換到root賬戶執行操作;
-
主機名問題,rabbitmq會在啟動前會解析主機名的地址是否可通,需要添加主機名;
vi /etc/hosts
127.0.0.1 hostname
apt安裝
apt install rabbitmq-server
apt安裝后rabbitmq-server會自動啟動。rabbitmq的安裝文件目錄在/usr/local/rabbitmq,啟動文件在/etc/init.d/rabbitmq-server,命令行目錄在/usr/sbin/rabbitmmq.
# /etc/init.d/rabbitmq-server
PATH=/sbin:/usr/sbin:/bin:/usr/bin
NAME=rabbitmq-server
DAEMON=/usr/sbin/${NAME} # 守護進程的路徑
CONTROL=/usr/sbin/rabbitmqctl # 客戶端路徑
DESC="RabbitMQ Messaging Server"
USER=rabbitmq
ROTATE_SUFFIX=
INIT_LOG_DIR=/var/log/rabbitmq # 日志路徑
PID_FILE=/var/run/rabbitmq/pid # 進程文件路徑
rabbitmq的組件
rabbitmq的組件放置在~/bin目錄下,我們進入可以看到:
rabbitmqctl : rabbitmq的客戶端,用來連接管理rabbitmq;
rabbitmq-env :配置環境變量的管理者;
rabbitmq-plugins:rabbitmq后台插件管理;
rabbitmq-server: rabbitmq守護進程;
rabbitmq的管理
- rabbitmq使用rabbitmqctl管理,常用的命令有:
rabbitmq-server -detached # 使用守護進程方式啟動
rabbitmq-server start # 使用阻塞方式啟動
rabbitmqctl stop # 關閉rabbitmq
rabbitmqctl list_users # 查看后台管理員名單
rabbitmqctl list_queues # 查看當前的所有的隊列
rabbitmqctl list_exchanges # 查看所有的交換機
rabbitmqctl list_bindings # 查看所有的綁定
rabbitmqctl list_connections # 查看所有的tcp連接
rabbitmqctl list_channels # 查看所有的信道
rabbitmqctl stop_app # 關閉應用
rabbitmqctl start_app # 打開應用
rabbitmqctl reset # 清空隊列
- 查看狀態信息
rabbitmqctl status
# 得到如下的信息
[{pid,3086}, # rabbitmq服務運行的進程ID
{running_applications,
[{rabbit,"RabbitMQ","3.6.10"},
{ranch,"Socket acceptor pool for TCP protocols.","1.3.0"},
{ssl,"Erlang/OTP SSL application","8.2"},
{public_key,"Public key infrastructure","1.4.1"},
{asn1,"The Erlang ASN1 compiler version 5.0","5.0"},
{os_mon,"CPO CXC 138 46","2.4.2"},
{rabbit_common,
"Modules shared by rabbitmq-server and rabbitmq-erlang-client",
"3.6.10"},
{syntax_tools,"Syntax tools","2.1.2"},
{xmerl,"XML parser","1.3.15"},
{crypto,"CRYPTO","4.0"},
{mnesia,"MNESIA CXC 138 12","4.15"},
{compiler,"ERTS CXC 138 10","7.1"},
{sasl,"SASL CXC 138 11","3.0.4"},
{stdlib,"ERTS CXC 138 10","3.4"},
{kernel,"ERTS CXC 138 10","5.3"}]},
{os,{unix,linux}},
{erlang_version,
"Erlang/OTP 20 [erts-9.0] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:64] [hipe] [kernel-poll:true]\n"},
{memory, # 內存
[{total,56444960}, # 總共消耗的內存,單位字節
{connection_readers,0}, # tcp訂閱連接消耗
{connection_writers,0}, # tcp發布者連接消耗
{connection_channels,0}, # 信道消耗
{connection_other,0}, # 其他消耗
{queue_procs,2840}, # 隊列進程消耗
{queue_slave_procs,0}, # 隊列子進程消耗
{plugins,0}, # 插件消耗
{other_proc,22726336}, # 其他進程消耗
{mnesia,60944},
{metrics,184544},
{mgmt_db,0},
{msg_index,45048}, # 消息標記
{other_ets,1695784},
{binary,94472}, # 一些被引用的數據
{code,21374813}, # 代碼
{atom,891849},
{other_system,9549962}]},
{alarms,[]},
{listeners,[{clustering,25672,"::"},{amqp,5672,"::"}]}, # mq監聽端口5672,erlang端口25672
{vm_memory_high_watermark,0.4}, # 開啟流控的內存閥值
{vm_memory_limit,6568098201}, # 消息持久化閥值
{disk_free_limit,50000000}, # 磁盤開啟流控閥值
{disk_free,48187891712}, # 磁盤空閑量
{file_descriptors, # 文件句柄
[{total_limit,924}, # 文件句柄上限
{total_used,2}, # 已使用
{sockets_limit,829}, # 允許的TCP連接上限
{sockets_used,0}]}, # 已使用連接數
{processes,
[{limit,1048576}, # 允許的最大進程數
{used,156}]}, # 已使用進程數
{run_queue,0}, # 運行的隊列數
{uptime,97},
{kernel,{net_ticktime,60}}]