构建自动化mochiweb-nitrogen

1 在生产环境下,用inets实现的nitrgoen框架遇到并发量大的情况下会出现瓶颈,mochiweb在并发处理上优势要远大于inets,因此决定实现mochiweb-nitrogen框架。

2 准备工作,下载各应用

下载nitrogen源码http://github.com/nitrogen/nitrogen/tarball/v2.0.4

下载mochiweb源码https://github.com/mochi/mochiweb/tarball/master

下载rebar源码 https://github.com/basho/rebar/tarball/master

解压缩:

tar -zxvf mochi-mochiweb-v2.3.1-5-gd541e9a.tar.gz tar -zxvf nitrogen-nitrogen-v2.0.4-0-gc1cbc00.tar.gz tar -zxvf basho-rebar-2.0.0-15-gb1d06a4.tar.gz 重命名:

 

 

mv mochi-mochiweb-d541e9a/ mochiweb mv nitrogen-nitrogen-c1cbc00/ nitrogen 构建rebar

 

 

cd basho-rebar-b1d06a4/ ./bootstrap
以上命令生产了一个rebar文件

 

 

3 编译mochiweb_nitrogen

1 拷贝mochiweb到apps目录下
2修改makefile文件,使nitrogen能够顺利编译通过
在nitrogen/Makefile 中,rel_inner:位置下添加
@(cd apps/mochiweb; make)
3 make rel_mochiweb
4 在rel/目录下生成了一个名为nitrogen的文件夹
5 执行<span> </span>./rel/nitrogen/bin/nitrogen console Erlang R14A (erts-5.8) [source] [64-bit] [smp:4:4] [rq:4] [async-threads:5] [kernel-poll:true] Eshell V5.8 (abort with ^G) (nitrogen@127.0.0.1)1> Starting Mochiweb Server (nitrogen) on 0.0.0.0:8000, root: './site/static' 证明nitrogen已经编译通过并启动成功。

4 以上编译已经通过,可以进行正常开发,但以前经常使用rebar构建项目,感觉这样开发很别扭,所以想把结构重新调整一下,如下:

5 新建自己的应用程序

mkdir myapp cd myapp
把刚才生成的rebar文件考到此目录下
$ ./rebar create-app appid=myapp ==> myapp (create-app) Writing src/myapp.app.src Writing src/myapp_app.erl Writing src/myapp_sup.erl $ ls <span style="background-color: rgb(51, 204, 0);" mce_style="background-color: #33cc00;">rebar</span> src mkdir deps rel site 把mochiweb,nitrgen/apps目录下的nitrogen, simple_bridge,nprocreg考到deps目录下

$ ls mochiweb nitrogen nprocreg simple_bridge

 

在myapp目录下新建文件Makefile,rebar.config,start.sh

Makefile文件中内容:

 

$ cat Makefile MYAPP_VERSION=1.0.1 all: get-deps compile help: <span> </span>@echo <span> </span>@echo "Usage: " <span> </span>@echo " ./make {compile|clean}" <span> </span>@echo <span> </span>@echo " ./make {rel|package}" <span> </span>@echo <span> </span>@echo get-deps: <span> </span>./rebar get-deps compile: get-deps <span> </span>./rebar compile clean: <span> </span>./rebar clean # MOCHIWEB rel: compile <span> </span>@rm -rf rel/myapp <span> </span>@rm -rf rel/reltool.config <span> </span>@ln rel/myapp.config rel/reltool.config <span> </span>@(make rel_inner) <span> </span>@mv rel/myapp rel/myapp-${MYA<pre name="code" class="plain">$ cat rebar.config %% -*- mode: erlang;erlang-indent-level: 4;indent-tabs-mode: nil -*- %% ex: ts=4 sw=4 ft=erlang et %% Additional library directories to add to the code path %%{lib_dirs, ["deps","apps"]}. {sub_dirs, ["rel","site","deps"]}. {require_otp_vsn, "R13B04|R14"}. {cover_enabled, true}. {erl_opts, [debug_info, fail_on_warning]}. {deps, [ %% mochiweb for JSON and header parsing mochiweb, %% webmachine for multipart content parsing nitrogen, nprocreg, simple_bridge ]}.</pre>
PP_VERSION}
@echo Generated a self-contained myapp project
@echo "Usage: rel/myapp-${MYAPP_VERSION}/bin/myapp {start|stop|restart|reboot|ping|console|attach}"

package:
mkdir -p ./builds
tar -C rel -c myapp-${MYAPP_VERSION} | gzip > ./builds/myapp-${MYAPP_VERSION}.tar.gz

# SHARED
rel_inner:
@(cd rel; ./rebar generate)
@(cd rel/myapp; make)
@printf "myapp Version:\n${MYAPP_VERSION}\n\n" > rel/myapp/BuildInfo.txt
@echo "Built On (uname -v):" >> rel/myapp/BuildInfo.txt
@uname -v >> rel/myapp/BuildInfo.txt
@rm -rf rel/reltool.config

 

$ cat rebar.config %% -*- mode: erlang;erlang-indent-level: 4;indent-tabs-mode: nil -*- %% ex: ts=4 sw=4 ft=erlang et %% Additional library directories to add to the code path %%{lib_dirs, ["deps","apps"]}. {sub_dirs, ["rel","site","deps"]}. {require_otp_vsn, "R13B04|R14"}. {cover_enabled, true}. {erl_opts, [debug_info, fail_on_warning]}. {deps, [ %% mochiweb for JSON and header parsing mochiweb, %% webmachine for multipart content parsing nitrogen, nprocreg, simple_bridge ]}.
$ cat start.sh #!/bin/sh cd `dirname $0` exec erl -pa ./deps/*/ebin -pa ./site/ebin -boot start_sasl -config "etc/app.config" -config "etc/mochiweb.config" -args_file "etc/vm.args" -eval "application:start(myapp)" -eval "application:start(inets)"
拷贝nitrogen/rel/nitrogen/site目录下的文件到site目录中

 

cp /home/andy/baidu/personal/mochiweb_test/nitrogen/rel/nitrogen/site/ebin ./ -r
cp /home/andy/baidu/personal/mochiweb_test/nitrogen/rel/nitrogen/site/include ./ -r
cp /home/andy/baidu/personal/mochiweb_test/nitrogen/rel/nitrogen/site/src ./ -r
cp /home/andy/baidu/personal/mochiweb_test/nitrogen/rel/nitrogen/site/static ./ -r
cp /home/andy/baidu/personal/mochiweb_test/nitrogen/rel/nitrogen/site/templates ./ -r
cp /home/andy/baidu/personal/mochiweb_test/nitrogen/rel/nitrogen/site/Emakefile ./

复制myapp/src 下的三个文件myapp.app.src,myapp_app.erl,myapp_sup.erl 到目录myapp/site/src下, 修改myapp_sup.erl如下:

 

$ cat myapp_sup.erl -module(myapp_sup). -behaviour(supervisor). %% API -export([start_link/0]). %% Supervisor callbacks -export([init/1]). %% Helper macro for declaring children of supervisor -define(CHILD(I, Type), {I, {I, start_link, []}, permanent, 5000, Type, [I]}). -include_lib("nitrogen/include/wf.hrl"). %% =================================================================== %% API functions %% =================================================================== start_link() -> supervisor:start_link({local, ?MODULE}, ?MODULE, []). %% =================================================================== %% Supervisor callbacks %% =================================================================== init([]) -> %% Start the Process Registry... application:start(nprocreg), %% Start Mochiweb... application:load(mochiweb), {ok, BindAddress} = application:get_env(mochiweb, bind_address), {ok, Port} = application:get_env(mochiweb, port), {ok, ServerName} = application:get_env(mochiweb, server_name), {ok, DocRoot} = application:get_env(mochiweb, document_root), io:format("Starting Mochiweb Server (~s) on ~s:~p, root: '~s'~n", [ServerName, BindAddress, Port, DocRoot]), % Start Mochiweb... Options = [ {name, ServerName}, {ip, BindAddress}, {port, Port}, {loop, fun loop/1} ], mochiweb_http:start(Options), % Web = {erlang_mcpack, % {erlang_mcpack, start_link, []}, % permanent, 5000, worker, dynamic}, % Processes=[Web], {ok, { {one_for_one, 5, 10}, []} }. loop(Req) -> {ok, DocRoot} = application:get_env(mochiweb, document_root), RequestBridge = simple_bridge:make_request(mochiweb_request_bridge, {Req, DocRoot}), ResponseBridge = simple_bridge:make_response(mochiweb_response_bridge, {Req, DocRoot}), nitrogen:init_request(RequestBridge, ResponseBridge), nitrogen:run().
删除nitrogen_init.erl,nitrogen_mochiweb.erl

 

修改 myapp/etc下配置文件

 

andy@yuhaitao:~/baidu/personal/mochiweb_test/myapp/etc$ cat app.config %% -*- mode: erlang -*- [ {myapp, [ % If a signkey is not specified, then Nitrogen uses the Erlang cookie. % {signkey, "SECRET"}, % Default session timeout is 20 minutes. % {session_timeout, 20}, % Specify a session cookie name. Uses "wf" by default. % {cookie_name, "wf"} ]}, %% SASL config {sasl, [ {sasl_error_logger, {file, "log/sasl-error.log"}}, {errlog_type, error}, {error_logger_mf_dir, "log/sasl"}, % Log directory {error_logger_mf_maxbytes, 10485760}, % 10 MB max file size {error_logger_mf_maxfiles, 5} % 5 files max ]} ]. andy@yuhaitao:~/baidu/personal/mochiweb_test/myapp/etc$ cat mochiweb.config %% -*- mode: erlang -*- [{mochiweb, [ {bind_address, "0.0.0.0"}, {port, 8000},<pre name="code" class="plain">andy@yuhaitao:~/baidu/personal/mochiweb_test/myapp$ ./start.sh Erlang R14A (erts-5.8) [source] [64-bit] [smp:4:4] [rq:4] [async-threads:5] [kernel-poll:true] Eshell V5.8 (abort with ^G) (myapp@127.0.0.1)1> Starting Mochiweb Server (nitrogen) on 0.0.0.0:8000, root: './site/static' </pre>
{server_name, nitrogen}, {document_root, "./site/static"}]}].andy@yuhaitao:~/baidu/personal/mochiweb_test/myapp/etc$ cat vm.args ## Name of the riak node-name myapp@127.0.0.1## Cookie for distributed erlang-setcookie myapp## Heartbeat management; auto-restarts VM if it dies or becomes unresponsive## (Disabled by default..use with caution!)##-heart## Enable kernel poll and a few async threads+K true+A 5## Increase number of concurrent ports/sockets-env ERL_MAX_PORTS 4096## Tweak GC to run more often -env ERL_FULLSWEEP_AFTER 10## Include .beam files for site.-pa ./site/ebin## Run code at startup.-eval "application:start(myapp)"

 

删除掉myapp下的src目录
修改start.sh文件属性

 

chmod 777 start.sh

测试一下:

 

andy@yuhaitao:~/baidu/personal/mochiweb_test/myapp$ ./start.sh Erlang R14A (erts-5.8) [source] [64-bit] [smp:4:4] [rq:4] [async-threads:5] [kernel-poll:true] Eshell V5.8 (abort with ^G) (myapp@127.0.0.1)1> Starting Mochiweb Server (nitrogen) on 0.0.0.0:8000, root: './site/static' 这里是开发环境,已经OK

 

下一步进行打包版本的修改

 

把nitrgen/rel下的overlay文件夹,overlay_mochiweb文件夹,mochiweb.config文件,rebar文件拷贝到myapp/rel目录下

修改mochiweb.config文件名为myapp.config,修改内容

 

{sys, [ {lib_dirs, ["../deps","../site"]}, {rel, "myapp", "2.0.4", [ kernel, stdlib, sasl, inets, crypto, runtime_tools, mochiweb, simple_bridge, nprocreg ]}, {rel, "start_clean", "", [ kernel, stdlib ]}, {boot_rel, "myapp"}, {profile, embedded}, {excl_sys_filters, [ "^bin/.*", "^erts.*/bin/(dialyzer|typer)" ]}, {app, mochiweb, [{incl_cond, include}]}, {app, myapp, [{incl_cond, include}]}, {app, nitrogen, [{incl_cond, include}]}, {app, simple_bridge, [{incl_cond, include}]}, {app, nprocreg, [{incl_cond, include}]}, {app, sasl, [{incl_cond, include}]} ]}. {rebar, [ {empty_dirs, [ "log/sasl" ]}, {overlay, "overlay"}, {overlay, "overlay_mochiweb"} ]}.

 

修改myapp/rel/overlay/bin目录下的nitrogen文件,重命名为myapp

把myapp/etc下的app.config文件与vm.args文件拷贝到myapp/rel/overlay/etc下替换掉之前的文件

把myapp/etc下的mochiweb.config文件拷贝到myapp/rel/overlay_mochiweb/etc下替换掉之前的文件

把myapp/site/ebin/myapp.app文件文件拷贝到myapp/rel/overlay_mochiweb/site/ebin目录下删除掉之前的文件

把myapp/site/src/下的myapp.app.src,myapp_app.erl,myapp_sup.erl文件拷贝到myapp/rel/overlay_mochiweb/site/src目录下删除掉之前的文件

一切ok

测试一下

 

andy@yuhaitao:~/baidu/personal/mochiweb_test/myapp$ make rel ./rebar get-deps ==> Entering directory `/home/andy/baidu/personal/mochiweb_test/myapp/deps/mochiweb' ==> mochiweb (get-deps) ==> Leaving directory `/home/andy/baidu/personal/mochiweb_test/myapp/deps/mochiweb' ==> Entering directory `/home/andy/baidu/personal/mochiweb_test/myapp/deps/nitrogen' ==> nitrogen (get-deps) ==> Leaving directory `/home/andy/baidu/personal/mochiweb_test/myapp/deps/nitrogen' ==> Entering directory `/home/andy/baidu/personal/mochiweb_test/myapp/deps/nprocreg' ==> nprocreg (get-deps) ==> Leaving directory `/home/andy/baidu/personal/mochiweb_test/myapp/deps/nprocreg' ==> Entering directory `/home/andy/baidu/personal/mochiweb_test/myapp/deps/simple_bridge' ==> simple_bridge (get-deps) ==> Leaving directory `/home/andy/baidu/personal/mochiweb_test/myapp/deps/simple_bridge' ==> Entering directory `/home/andy/baidu/personal/mochiweb_test/myapp/rel' ==> rel (get-deps) ==> Leaving directory `/home/andy/baidu/personal/mochiweb_test/myapp/rel' ==> Entering directory `/home/andy/baidu/personal/mochiweb_test/myapp/site' ==> site (get-deps) ==> Leaving directory `/home/andy/baidu/personal/mochiweb_test/myapp/site' ==> Entering directory `/home/andy/baidu/personal/mochiweb_test/myapp/deps' ==> deps (get-deps) ==> Leaving directory `/home/andy/baidu/personal/mochiweb_test/myapp/deps' ==> myapp (get-deps) ./rebar compile ==> Entering directory `/home/andy/baidu/personal/mochiweb_test/myapp/deps/mochiweb' ==> mochiweb (compile) ==> Leaving directory `/home/andy/baidu/personal/mochiweb_test/myapp/deps/mochiweb' ==> Entering directory `/home/andy/baidu/personal/mochiweb_test/myapp/deps/nitrogen' ==> nitrogen (compile) ==> Leaving directory `/home/andy/baidu/personal/mochiweb_test/myapp/deps/nitrogen' ==> Entering directory `/home/andy/baidu/personal/mochiweb_test/myapp/deps/nprocreg' ==> nprocreg (compile) ==> Leaving directory `/home/andy/baidu/personal/mochiweb_test/myapp/deps/nprocreg' ==> Entering directory `/home/andy/baidu/personal/mochiweb_test/myapp/deps/simple_bridge' ==> simple_bridge (compile) ==> Leaving directory `/home/andy/baidu/personal/mochiweb_test/myapp/deps/simple_bridge' ==> Entering directory `/home/andy/baidu/personal/mochiweb_test/myapp/rel' ==> rel (compile) ==> Leaving directory `/home/andy/baidu/personal/mochiweb_test/myapp/rel' ==> Entering directory `/home/andy/baidu/personal/mochiweb_test/myapp/site' ==> site (compile) ==> Leaving directory `/home/andy/baidu/personal/mochiweb_test/myapp/site' ==> Entering directory `/home/andy/baidu/personal/mochiweb_test/myapp/deps' ==> deps (compile) ==> Leaving directory `/home/andy/baidu/personal/mochiweb_test/myapp/deps' ==> myapp (compile) make[1]: 正在进入目录 `/home/andy/baidu/personal/mochiweb_test/myapp' ==> rel (generate) make[2]: 正在进入目录 `/home/andy/baidu/personal/mochiweb_test/myapp/rel/myapp' Recompile: ./src/myapp_sup Recompile: ./src/myapp_app Recompile: ./src/index make[2]:正在离开目录 `/home/andy/baidu/personal/mochiweb_test/myapp/rel/myapp' make[1]:正在离开目录 `/home/andy/baidu/personal/mochiweb_test/myapp' Generated a self-contained myapp project Usage: rel/myapp-1.0.1/bin/myapp {start|stop|restart|reboot|ping|console|attach} andy@yuhaitao:~/baidu/personal/mochiweb_test/myapp$ cd rel/myapp-1.0.1/bin/ andy@yuhaitao:~/baidu/personal/mochiweb_test/myapp/rel/myapp-1.0.1/bin$ ./myapp console Exec: /home/andy/baidu/personal/mochiweb_test/myapp/rel/myapp-1.0.1/erts-5.8/bin/erlexec -boot /home/andy/baidu/personal/mochiweb_test/myapp/rel/myapp-1.0.1/releases/2.0.4/myapp -embedded -config /home/andy/baidu/personal/mochiweb_test/myapp/rel/myapp-1.0.1/etc/app.config -config /home/andy/baidu/personal/mochiweb_test/myapp/rel/myapp-1.0.1/etc/mochiweb.config -args_file /home/andy/baidu/personal/mochiweb_test/myapp/rel/myapp-1.0.1/etc/vm.args -- console Root: /home/andy/baidu/personal/mochiweb_test/myapp/rel/myapp-1.0.1 Erlang R14A (erts-5.8) [source] [64-bit] [smp:4:4] [rq:4] [async-threads:5] [kernel-poll:true] Eshell V5.8 (abort with ^G) (myapp@127.0.0.1)1> Starting Mochiweb Server (nitrogen) on 0.0.0.0:8000, root: './site/static'

 

启动成功,ok

 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 1. 安装Erlang - 首先,需要安装Erlang的依赖库,执行以下命令: ``` sudo yum install epel-release sudo yum install gcc gcc-c++ glibc-devel make ncurses-devel openssl-devel autoconf ``` - 下载Erlang安装包,可以从官网下载,也可以使用以下命令下载: ``` wget https://packages.erlang-solutions.com/erlang/rpm/centos/7/x86_64/esl-erlang_23.3.4-1~centos~7_amd64.rpm ``` - 安装Erlang,执行以下命令: ``` sudo rpm -Uvh esl-erlang_23.3.4-1~centos~7_amd64.rpm ``` - 验证Erlang是否安装成功,执行以下命令: ``` erl ``` 如果能够进入Erlang的交互式环境,则说明安装成功。 2. 安装RabbitMQ - 添加RabbitMQ的Yum源,执行以下命令: ``` sudo tee /etc/yum.repos.d/rabbitmq.repo <<EOF [bintray-rabbitmq-server] name=bintray-rabbitmq-rpm baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.8.x/el/7/ gpgcheck=0 repo_gpgcheck=0 enabled=1 EOF ``` - 安装RabbitMQ,执行以下命令: ``` sudo yum install rabbitmq-server ``` - 启动RabbitMQ服务,执行以下命令: ``` sudo systemctl start rabbitmq-server ``` - 设置RabbitMQ服务开机自启动,执行以下命令: ``` sudo systemctl enable rabbitmq-server ``` - 验证RabbitMQ是否安装成功,执行以下命令: ``` sudo rabbitmqctl status ``` 如果能够看到类似以下输出,则说明安装成功: ``` Status of node rabbit@localhost ... [{pid,xxx}, {running_applications,[{rabbit,"RabbitMQ","3.8.16"}, {rabbit_common,[],"3.8.16"}, {amqp_client,"RabbitMQ AMQP Client","5.11.0"}, {rabbitmq_management,"RabbitMQ Management","3.8.16"}, {rabbitmq_management_agent,"RabbitMQ Management Agent","3.8.16"}, {rabbitmq_web_dispatch,"RabbitMQ Web Dispatcher","3.8.16"}, {webmachine,"webmachine","1.10.3"}, {mochiweb,"MochiMedia Web Server","2.20.0"}, {jsx,"JSX","2.11.0"}, {rabbitmq_prometheus,"Prometheus metrics exporter for RabbitMQ","3.8.16"}, {prometheus,"Prometheus","4.4.0"}, {prometheus_process_collector,"Prometheus process collector","4.4.0"}, {prometheus_httpd,"Prometheus httpd","4.4.0"}, {os_mon,"CPO CXC 138 46","2.4.7"}, {cowboy,"Small, fast, modular HTTP server.","2.8.0"}]}, {os,{unix,linux}}, {erlang_version,"xxx"}, {memory,[{total,xxx}, {connection_readers,xxx}, {connection_writers,xxx}, {connection_channels,xxx}, {connection_other,xxx}, {queue_procs,xxx}, {queue_slave_procs,xxx}, {plugins,xxx}, {other_proc,xxx}, {mnesia,xxx}, {mgmt_db,xxx}, {msg_index,xxx}, {other_ets,xxx}]}, {alarms,[]}, {listeners,[{clustering,xxx,"::"},{amqp,xxx,"::"}]}, {vm_memory_high_watermark,xxx}, {vm_memory_limit,xxx}, {disk_free_limit,xxx}, {disk_free,xxx}, {file_descriptors,[{total_limit,xxx}, {total_used,xxx}, {sockets_limit,xxx}, {sockets_used,xxx}]}, {processes,[{limit,xxx},{used,xxx}]}, {run_queue,xxx}, {uptime,xxx}] ``` ### 回答2: CentOS 7是一款稳定可靠的操作系统,因为其安全性和稳定性得到广泛认可。为了实现消息队列的功能,我们需要安装Erlang和RabbitMQ。 一、安装Erlang 1. 首先,我们需要在CentOS 7安装Erlang,打开命令行终端窗口,键入以下命令: sudo yum update sudo yum -y install epel-release 2. 安装依赖库: sudo yum -y install gcc gcc-c++ glibc-devel make ncurses-devel openssl-devel autoconf java-1.8.0-openjdk-devel 3. 下载Erlang软件包: wget http://packages.erlang-solutions.com/site/esl/esl-erlang/FLAVOUR_1_general/esl-erlang_24.1-1~centos~7_amd64.rpm 4. 运行以下命令安装Erlang: sudo rpm -Uvh esl-erlang_24.1-1~centos~7_amd64.rpm 二、安装RabbitMQ 1. 下载RabbitMQ: sudo wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.9.4/rabbitmq-server-generic-unix-3.9.4.tar.xz 2. 解压RabbitMQ: sudo tar -xvf rabbitmq-server-generic-unix-3.9.4.tar.xz 3. 安装RabbitMQ: sudo mv rabbitmq_server-3.9.4 /usr/lib/rabbitmq 4. 创建RabbitMQ配置文件: sudo mkdir /etc/rabbitmq sudo touch /etc/rabbitmq/rabbitmq.conf sudo chmod 777 /etc/rabbitmq/rabbitmq.conf sudo nano /etc/rabbitmq/rabbitmq.conf 5. 将以下内容添加到rabbitmq.conf中: listeners.tcp.default = 5672 6. 创建RabbitMQ环境变量: sudo nano /etc/profile.d/rabbitmq.sh 7. 将以下内容添加到rabbitmq.sh: PATH=$PATH:/usr/lib/rabbitmq/sbin export PATH 8. 创建并启动RabbitMQ服务: sudo rabbitmq-server -detached 9. 检查RabbitMQ服务是否运行: sudo rabbitmqctl status 至此,安装Erlang和RabbitMQ的过程已经完成。 ### 回答3: CentOS 7 是一款广受欢迎的 Linux 操作系统,它被广泛用于服务器端应用。Erlang 和 RabbitMQ 是非常强大的开源应用程序,使得在分布式网络环境下构建高性能应用程序变得更加容易。本文将介绍如何在 CentOS 7 上安装 Erlang 和 RabbitMQ。 安装 Erlang Erlang 是一款强大的编程语言,被广泛应用于实时和高可靠性系统开发。以下是在 CentOS 7 上安装 Erlang 的步骤: 1. 安装 EPEL 和 RHEL 7 的 RPM 存储库,这将提供 erlang 小包和依赖关系。 sudo yum install epel-release sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 2. 导入 erlang-solutions rpm 存储库密钥: wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm sudo rpm -Uvh erlang-solutions-1.0-1.noarch.rpm 3. 安装 erlang: sudo yum install erlang 4. 检查 erlang 是否正确安装: erl 你将会看到 erlang shell: Erlang/OTP 23 [erts-11.0.2] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [hipe] Eshell V11.0.2 (abort with ^G) 安装 RabbitMQ RabbitMQ 是一个功能强大的消息代理,广泛用于分布式应用程序。这里是在 CentOS 7 上安装 RabbitMQ 的步骤: 1. 添加 RabbitMQ 的 RPM 存储库: sudo yum install https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.8.x/el/7/noarch/rabbitmq-server-3.8.8-1.el7.noarch.rpm 2. 安装 rabbitmq: sudo yum install rabbitmq-server 3. 启动和启用 rabbitmq 服务: sudo systemctl start rabbitmq-server.service sudo systemctl enable rabbitmq-server.service 4. 检查 rabbitmq 是否正确安装: sudo systemctl status rabbitmq-server.service 你将会看到: ● rabbitmq-server.service - RabbitMQ Messaging Server Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2020-10-20 23:55:06 UTC; 3s ago Main PID: 5845 (beam.smp) Memory: 104.2M CGroup: /system.slice/rabbitmq-server.service ├─5845 /usr/lib64/erlang/erts-11.0.2/bin/beam.smp -W w -A 64 -P 1048576 -t 5000000 -st ├─6027 erl_child_setup 1024 ├─6062 inet_gethost 4 └─6063 inet_gethost 4 如果看到 Active: active (running),表明 RabbitMQ 正常工作。 总结 以上就是在 CentOS 7 上安装 Erlang 和 RabbitMQ 的详细步骤。这两个应用程序可以使在分布式网络环境下构建高性能应用程序变得更加容易。如果你的应用程序需要可靠的通信,则 RabbitMQ 是一个理想的选择,同时 Erlang 语言可以帮助你快速构建高性能的分布式应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值