【问题标题】:Supervising multiple gen_servers with same module / different arguments监督具有相同模块/不同参数的多个 gen_servers
【发布时间】:2011-02-08 11:18:54
【问题描述】:

我有一个 OTP 应用程序,其中包含一个监督少量 gen_servers 的监督者。一个典型的子规范如下:

{my_server,
  {my_server, start_link, [123]},
  permanent, 
  5000, 
  worker,
  [my_server]}

目前没有问题。

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

{my_server_2,
  {my_server, start_link, [123]},
  permanent, 
  5000, 
  worker,
  [my_server_2]}

我认为这会起作用,但没有:

=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}]

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

谢谢,

贾斯汀

【问题讨论】:

    标签: erlang erlang-otp


    【解决方案1】:

    我的猜测是 my_server 使用 gen_server:start_link/4 注册其名称,因此当第二个尝试启动时它无法启动,因为该名称已被占用。 gen_servers 要么必须在没有名称的情况下启动 (gen_server:start_link/3),要么必须使用不同的名称。

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

    【讨论】:

    • 你是对的。我在 gen_server 中硬编码了服务器名称。谢谢你的线索。
    猜你喜欢
    • 2015-01-28
    • 1970-01-01
    • 2021-04-13
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 2015-12-19
    相关资源
    最近更新 更多