Skip to main content

07 Реестр и рабочее пространство

Рабочие пространства (workspace)

В запросах к сервису всегда указывается, в какое рабочее пространство они обращаются. При запуске сервиса можно указать, какие workspace они будут обслуживать.

async start() {
  ...
  //Этот сервис будет доступен только в пространстве myWS
  this.workspace = "myWS"
}

Если workspace не указан, то такой сервис будет считатся универсальным. В универсальный сервис приходят запросы со всех workspace, за исключением если развернут одноименный сервис с указанным workspace. Сервис может быть в пространстве common, если его логика не делит запросы на разные пространства

Установка реестра

npm i ./corelibs/registry

В index.js:

import {Registry} from  '@morphcluster/registry'
...
host.addService(new Registry(host))

Схема реестра

Реестр позволяет сервисам публиковать схему(шаблон), для удобства изменения этих настроек с админ-панели. Схема реестра задается в формате json-schema, которая получается после объединения схем реестра всех сервисов.

const registrySchema = {
 "type": "object",
  "properties": {
   "test": {
    "type": "object",
    "properties": {
      "hello": {
        "type": "string"
      }
    }
  }
}

...

async start() {
  await super.start()
  //После этого запроса Реестр запомнит, какие настроийки нужны этому сервису
  await this.Registry.mergeSchema({schema:registrySchema},"common")
}

В примере для этого сервиса в реестре можно будет задать, например такую настройку:

{ "test" : { "hello" : "world" } }

Получение реестра

Получить реестр по всем workspace:

let reg = await this.Registry.getAll({}, "common", log)

Также, при изменении реестра будет вызвано событие, на которое можно подписаться:

this.Registry.onChanged.on(()=> this.projectsChanged())