Контроль нескольких серверов 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 ответ:
Я предполагаю, что my_server регистрирует свое имя с помощью using gen_server:start_link/4, так что когда второй пытается запустить его, он не может, потому что имя уже занято. Gen_servers должны начинаться либо без имени (gen_server: start_link / 3), либо с другими именами.
Кажется странным варьировать последний элемент дочерней спецификации, который определяет список модулей, используемых рабочим. Это действительно то, что ты задумал?