使用相同的模块/不同的参数监督多个gen_servers

Jus*_*tin 3 erlang erlang-otp

我有一个OTP应用程序,包括一个监督少量gen_servers的主管.典型的子规范如下:

{my_server,
  {my_server, start_link, [123]},
  permanent, 
  5000, 
  worker,
  [my_server]}
Run Code Online (Sandbox Code Playgroud)

到目前为止没问题.

我现在想要使用与上面相同的模块Module/Fn向管理程序结构添加额外的gen_server,但是不同的参数,例如

{my_server_2,
  {my_server, start_link, [123]},
  permanent, 
  5000, 
  worker,
  [my_server_2]}
Run Code Online (Sandbox Code Playgroud)

我认为这会奏效,但不会:

=SUPERVISOR REPORT==== 15-Apr-2010::16:50:13 ===
     Supervisor: {local,my_sup}
     Context:    start_error
     Reason:     {already_started,<0.179.0>}
     Offender:   [{pid,undefined},
                  {name,my_server_2},
                  {mfa,{my_server,start_link,[]}},
                  {restart_type,permanent},
                  {shutdown,5000},
                  {child_type,worker}]
Run Code Online (Sandbox Code Playgroud)

每个子规范的第二个元素中的模块参数是否需要不同?

谢谢,

贾斯汀

cth*_*ops 7

我的猜测是my_server使用gen_server:start_link/4来注册它的名字,所以当第二个尝试启动时它不能,因为名字已被采用.gen_servers必须在没有名称(gen_server:start_link/3)或不同名称的情况下启动.

改变子规范的最后一个元素似乎很奇怪,它标识了工作者使用的模块列表.这真的是你想要的吗?