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

发布于 2024-08-29 00:51:32 字数 896 浏览 10 评论 0原文

我有一个 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}]

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

谢谢,

贾斯汀

I have a OTP application comprising a single supervisor supervising a small number of gen_servers. A typical child specification is as follows:

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

No problems so far.

I now want to an add extra gen_server to the supervisor structure, using the same module Module/Fn as above, but different arguments, eg

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

I thought this would work, but no:

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

Do the module arguments in the second element of each child specification need to be different ?

Thanks,

Justin

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

七秒鱼° 2024-09-05 00:51:32

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

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

My guess is that my_server registers its name using using gen_server:start_link/4, so that when the second one tries to start it can't because the name is already taken. The gen_servers will either have to start without a name (gen_server:start_link/3) or with different names.

It seems strange to vary the last element of the child spec, which identifies the list of modules used by the worker. Is this really what you intend?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文