Ciclo de vida do Broker
Esta seção descreve o que acontece quando o broker está iniciando & parando.
Lógica de inicialização
Ao iniciar, o broker tenta estabelecer uma conexão com o módulo de transporte. Quando terminado, ele não publica a lista de serviços local para nós remotos porque ainda não pode aceitar requisições. Ele inicia os serviços (chama cada manipulador de serviço iniciado
). Depois que todos os serviços iniciaram com sucesso, o broker publica a lista de serviço local para nós remotos. Portanto, nós remotos só enviam requisições depois que todos os serviços locais forem inicializados corretamente.
Avoid deadlocksOs deadlocks podem ocorrer quando dois serviços esperam um pelo outro. Ex: O serviço
users
temdependencies: ["posts"]
e o serviçoposts
temdependencies: ["users"]
. Para evitar isso, remova o serviço em questão dedependencies
e ao invés disso use o métodothis.waitForServices
no métodostarted
.
Lógica de parada
Quando você chamar o broker.stop
ou parar o processo, inicialmente o broker publica uma lista de serviços vazia para os nós remotos, portanto, irão encaminhar as requisições para outras instâncias em vez de serviços que estão sendo desligados. Em seguida, o broker inicia a parada de todos os serviços locais. Depois disso, o módulo de transporte desconecta e processa o encerramento.
Ciclo de vida do serviço
Esta seção descreve o que acontece quando um serviço está iniciando & parando e como você deve usar o manipulador de eventos do ciclo de vida.
Manipulador de eventos created
Este manipulador é acionado quando a instância do serviço é criada (por exemplo: em broker.createService
ou broker.loadService
). Você pode usá-lo para criar instâncias de outros módulos (por exemplo, servidor http, banco de dados) e armazená-los em this
.
const http = require("http"); |
Este é um manipulador de eventos síncrono. Você não pode retornar uma
Promise
e você não pode usarasync/await
.
Manipulador de eventos started
Este manipulador é acionado ao chamar broker.start
e o broker inicia todos os serviços locais. Use-o para conectar ao banco de dados, se registrar a servidores… etc.
module.exports = { |
Este é um manipulador de eventos assíncrono. Uma
Promise
pode ser retornada ou useasync/await
.
Manipulador de eventos stopped
Este manipulador é acionado ao chamar broker.stop
e o broker inicia o desligamento de todos os serviços locais. Use-o para fechar conexões do banco de dados, encerrar sockets…etc.
module.exports = { |
Este é um manipulador de eventos assíncrono. Uma
Promise
pode ser retornada ou useasync/await
.
Manipulador de eventos merged
Este manipulador é chamado após os esquemas de serviço (incluindo mixins) forem mesclados, mas antes que o serviço seja registrado. Isso significa que você pode manipular o esquema de serviço mesclado antes dele ser processado.
// posts.service.js |