Жизненный цикл брокера
Этот раздел описывает, что происходит, когда брокер запускается и останавливается.
Логика запуска
При запуске брокер пытается установить связь с транспортом. Когда это сделано, он не публикует список локальных сервисов удаленным узлам, потому что он еще не может принять запрос. Она запускает все сервисы (вызовы каждый service started
handler). После успешного запуска всех сервисов брокер публикует список локальных сервисов удаленным узлам. Поэтому удаленные узлы отправляют запросы только после того, как все локальные службы будут правильно инициализированы и запущены.
Avoid deadlocksВзаимоблокировки могут возникнуть, когда две службы ждут друг друга. Например: сервис
users
зависит отdependencies: ["posts"]
и сервисposts
имеет зависимостьdependencies: ["users"]
. Чтобы избежать этого, удалите соответствующую службу из зависимостейdependencies
и используйте вместо этого методthis.waitForServices
в обработчикеstarted
.
Логика остановки
Когда вы вызываете broker.stop
или останавливаете процесс, во первых брокер публикует пустой список сервисов на удаленные узлы, так что они будут направлять запросы в другие экземпляры сервиса вместо останавливаемого. Далее брокер начинает остановку всех локальных сервисов. После этого транспорт отключается и завершается процесс.
Жизненный цикл сервиса
Этот раздел описывает, что происходит, когда сервис запускается и останавливается, и как вам следует использовать обработчики событий жизненного цикла.
Обработчик created
Этот обработчик запускается, когда создается экземпляр сервиса (например: во время broker.createService
или broker.loadService
). Вы можете использовать его для создания экземпляров других модулей (например, http сервера, модулей БД) и хранения их в this
.
const http = require("http"); |
Это синхронный обработчик событий. Нельзя возвращать
Promise
и нельзя использоватьasync/await
.
Обработчик started
Этот обработчик запускается, когда вызывается broker.start
и брокер запустил все локальные сервисы. Используйте его для подключения к базе данных, открытия сокетов… и т.д.
module.exports = { |
Это асинхронный обработчик событий. Можно вернуть
Promise
или использоватьasync/await
.
Обработчик stopped
Этот обработчик запускается, когда вызывается broker.stop
и брокер начинает останавливать все локальные сервисы. Используйте его для закрытия соединений с базой данных, закрытия сокетов…и т.д.
module.exports = { |
Это асинхронный обработчик событий. Можно вернуть
Promise
или использоватьasync/await
.
merged
обработчик события
Этот обработчик вызывается после объединения схемы сервиса (включая примеси), но до регистрации сервиса. Это означает, что вы можете манипулировать объединённой схемой сервиса до её обработки.
// posts.service.js |