Контроль нескольких серверов gen с одним модулем / разными аргументами


У меня есть приложение 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}]

Должны ли аргументы модуля во втором элементе каждой дочерней спецификации быть по-другому ?

Спасибо,

Джастин

1 3

1 ответ:

Я предполагаю, что my_server регистрирует свое имя с помощью using gen_server:start_link/4, так что когда второй пытается запустить его, он не может, потому что имя уже занято. Gen_servers должны начинаться либо без имени (gen_server: start_link / 3), либо с другими именами.

Кажется странным варьировать последний элемент дочерней спецификации, который определяет список модулей, используемых рабочим. Это действительно то, что ты задумал?