分页查询模块也采用OTP框架,这样可以将其置于监督者的管理之下。分页查询模块的监督者采用简易一对一模式(simple_one_for_one),该模式下,只能启动一种子进程,但是却可以启动任意多个。所有的子进程都是运行时动态添加的,监督者在启动时不会启动任何子进程,这种模式正好适应我们当前的需要。监督者可以通过supervisor: start_child/0函数来启动新的子进程。
监督者策略,此处Restart设置为temporary,表示子进程用不重启。因为根据我们当前搜索联系人的业务特点,重启子进程没有任何必要。其他可选项还有:permanent,表示无论什么原因导致进程终止都应重启;transient,仅在进程意外终止时重启。
Shutdown设置为brutal_kill,表示关闭监督进程时立即终止子进程。其他选项还有:一个以毫秒为单位的整数,表示监督者终止后最长留给子进程关闭的时间;infinity,给予子进程充分的时间自行退出。
RestartStrategy里设定的0和1表示不重启子进程。
-module(cs_sup_pageSearchPeople).
-behaviour(supervisor).
-export([
start_link/0,
start_child/0
]).
-export([init/1]).
-define(SERVER,?MODULE).
start_link()->
supervisor:start_link({local,?SERVER},?MODULE,[]).
start_child()->
supervisor:start_child(?SERVER,[]).
init([])->
Element={cs_pageSearchPeople,
{cs_pageSearchPeople,start_link,[]},
temporary,
brutal_kill,
worker,
[cs_pageSearchPeople]
},
Children=[Element],
RestartStrategy={simple_one_for_one,0,1},
{ok,{RestartStrategy,Children}}.