Supervisionando vários gen_servers com o mesmo módulo/argumentos diferentes

StackOverflow https://stackoverflow.com/questions/2646966

  •  27-09-2019
  •  | 
  •  

Pergunta

Eu tenho um aplicativo OTP composto por um único supervisor supervisionando um pequeno número de gen_servers.Uma especificação filha típica é a seguinte:

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

Sem problemas até agora.

Agora quero adicionar gen_server extra à estrutura do supervisor, usando o mesmo módulo Module/Fn acima, mas argumentos diferentes, por exemplo

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

Achei que isso funcionaria, mas não:

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

Os argumentos do módulo no segundo elemento de cada especificação filho precisam ser diferentes?

Obrigado,

Justino

Foi útil?

Solução

Meu palpite é que my_server registra seu nome usando gen_server:start_link/4, de modo que quando o segundo tentar iniciar ele não consiga porque o nome já está em uso.Os gen_servers terão que iniciar sem nome (gen_server:start_link/3) ou com nomes diferentes.

Parece estranho variar o último elemento da especificação filho, que identifica a lista de módulos utilizados pelo trabalhador.É realmente isso que você pretende?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top