Erlang OTP应用与监督机制

OTP应用的组织形式

当创建OTP应用时的主要工作集中于标准目录结构的建立和应用元数据的编写

OTP应用的目录布局:


元数据以普通Erlang项式描述,位于ebin目录下的一个名为<application-name>.app的文本文件中

应用行为模式

-module(tr_app).

-behaviour(application). %行为模式声明

-export([
start/2,
stop/1]).    %应用行为模式的回调函数

start(_Type, _StartArgs) ->
    case tr_sup:start_link() of    %启动根监督者
        {ok,Pid} ->
            {ok,Pid};
        Other ->
            {error,Other}
    end.
stop(_State) ->
    ok.

监督者实现容错

-module(test).
-behaviour(supervisor).

-export([start_link/0]).

-export([init/1]).

-define(SERVER, ?MODULE).

start_link() ->
  supervisor:start_link({local, ?SERVER}, ?MODULE, []). %启动监督者

init([]) ->  %指明如何启动和管理子进程
  RestartStrategy = one_for_one,
  MaxRestarts = 1000,  %规定在设定时间内允许重启的最大次数
  MaxSecondsBetweenRestarts = 3600,  %设定时间

  SupFlags = {RestartStrategy, MaxRestarts, MaxSecondsBetweenRestarts}, %指明监督者的行为

  Restart = permanent,
  Shutdown = 2000,
  Type = worker,

  AChild = {'AName', {'AModule', start_link, []},
    Restart, Shutdown, Type, ['AModule']},   %指明子进程的名称.

  {ok, {SupFlags, [AChild]}}. % 返回监督规范

监督者重启策略

1)one_for_one : 当有子进程退出,监督者将针对该进程,且仅针对该进程进行重启

2)one_for_all : 当有子进程退出,监督者重启所有子进程

3)rest_for_one : 当有子进程退出,则在停止并重启那些启动时在该子进程后的进程

4)simple_one_for_one : 简单的一对一

子进程规范

  AChild = {'AName', {'AModule', start_link, []},Restart, Shutdown, Type, ['AModule']}

第一个元素ID: 'AName' ,用于在系统内部标识各种规范的项式

第二项Start,是一个用于启动进程的三元组{Module,Function,Arguments}

第三个元素Restart,用于指明子进程发生故障时是否需要重启,可以指定为:permanent(总是),temporary(永不),transient(意外时)

第四个元素shutdown,用于指明如何终止进程,表示终止进程时应采用软关闭策略,给进程;留出一段自我了断的时间,如果进程未能在指定时间内自行退出,则无条件终止.可取值: 整数, brutal_kill(关闭监督进程时立即终止子进程), infinity(主要用于子进程本身也是监督者的情况,表示应给予子进程充分的时间自行退出)

第五个元素Type,用于标识时监督者(supervisor)还是工作者(worker)

第六个选项列出了该进程所依赖的模块,仅用于代码热更新时告知系统该以何种顺序升级各个模块,一般来说,只需要列出子进程的主模块.

生成EDoc文档

edoc:application(tcp_rpc,".",[]).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值