Перейти до основного вмісту

Сервіс відкриттів

інформація

Сервіс управління конфігурацією відповідає за обробку конфігураційних файлів та доступ до конфігураційних параметрів. Це ключовий сервіс, оскільки забезпечує всю інформацію, необхідну для запуску компонентів системи. Конфігураційні дані витягуються по ієрархічній ланці, що дозволяє встановлювати пріоритети та узгоджувати параметри на різних рівнях системи. Крім того, сервіс надає можливість змінювати конфігурацію окремих структурних елементів без перезавантаження ядра обчислень, що забезпечує гнучкість та ефективність управління конфігураціями.

Архітектура

Сервіс відкриттів є обов'язковим елементом і не може бути вимкненим за допомогою конфігураційних налаштувань, оскільки він відповідає за завантаження цих конфігурацій. Послідовність запуску з'єднувачів починається з з'єднувача обчислень, а першим сервісом, який запускається в цьому з'єднувачі, є сервіс відкриттів. Таким чином, всі компоненти системи завжди мають доступ до своїх власних конфігураційних значень. Важливо відзначити, що сервіс відкриттів вимагає передачі абстрактного сервісу.

discovery-service-arch.svg

порада

Опис, перелік параметрів конфігурацій, які підтримуються ядром обчислень, а також значення за замовчуванням дивись в розділ "Давайте почнем".

Застосування

інформація

Сервіс відкриттів використовується як основний елемент для обробки конфігурацій та налаштування кінцевих модулів, таких як сервіси, адаптери, стратегії тощо. Цей сервіс також використовується в агенті функціональності fnAgent, який має власний простір імен discovery. Цей простір імен відповідає за доступ до конфігураційних даних бізнес-схеми.

1.Використання в ядрі обчислень

import { inversify, ioredis } from '~packages';
import { AbstractConnector } from './abstract.connector';

import type { NRedisConnector } from '~types'

const { injectable } = inversify;

@injectable()
export class RedisConnector extends AbstractConnector implements IRedisConnector {
private _config: NRedisConnector.Config | undefined;
private _connection: IoRedis.IoRedis | undefined;

constructor(
// ... inject elements
) {
super();
}

private _setConfig(): void {
this._config = {
enable: this._discoveryService.getBoolean(
'connectors.redis.enable',
false
),
protocol: this._discoveryService.getString(
'connectors.redis.connect.protocol',
'redis'
)
// ... other configuration variables
}
}
}

де:

  • RedisConnector - клас зʼєднувача з Redis з частковим описом.
  • IRedisConnector - інтерфейс RedisConnector.
  • NRedisConnector - простір імен типіп, який описує перелік типів, які відносяться до RedisConnector.
  • _config - конфігурація Redis.
  • _setConfig - приватна функція заповнення конфігурації Redis значеннями.
    • enable - змінна boolean типу, яка відповідає за приєднання Redis до роботи ядра обчислень.
    • protocol - тип протоколу адресної строки доступу до серверу Redis сховища.

2.Використання в бізнес-схемі

import { setRouter } from '@x-fiber/calculator';

export const BusUsersAggRouter = setRouter<'get-one'>({
'get-one': {
GET: {
scope: 'private:user',
params: ['userId'],
handler: async (request, agents, context) => {
const { discovery } = agents.fnAgent;

type Config = {
integrations: {
system1: {
enable: boolean;
path: string;
fallbackPath: string;
};
};
urls: {
callbackUrl: string;
robinUrls: string[]
};
retryNumber: number;
certificatePath: string
};

const path = discovery.getMandatory<string, Config>('integrations.system1.path');
console.log(path) // string environment or throw e
},
},
},
});

де:

  • setRouter є вбудованою функцією ядра обчислень, що відповідає за створення опису документа Маршрутизатор.
  • BusUsersAggRouter - це опис документа Маршрутизатор в прикладній області BusUsersAgg.
    • discovery - простір імен для доступу до методів з сервісу відкриттів DiscoveryService для агента функціональності fnAgent.
    • Config - тип опису конфігураційних параметрів бізнес-схеми.
    • path - змінна строкового типу, яка отримує значення з конфігурації або викликає помилку у разі відсутності значення або ключа.

Завантаження конфігурацій

Ця ієрархія конфігураційних файлів встановлює пріоритет для використання налаштувань. Вона діє за принципом "перемагає той, хто має вищий пріоритет". Це означає, що у випадку конфлікту між параметрами, система віддасть перевагу тим, які мають більший пріоритет. Наприклад, налаштування, збережені у домашній папці користувача, будуть використані натомість тих, що розташовані у папці проекту.

Рівень 1. Зовнішній файл:

Доступ до зовнішнього файлу: /{homedir}/.fiber. Повний шлях до конкретної конфігурації:

/{homedir}/.fiber/{profile}/{kind}.{env}.config.json

де:

  • {homedir} - домашня директорія користувача.
  • .fiber- резервована директорія для профілів конфігурацій X-Fiber.
  • {profile} - профіль конфігурації, пов'язаний з веб-застосунком.
  • {kind}.{env}.config.json - конфігураційний файл, де:
    • {kind} - тип ядра (може бути, calculator, display, visualizer).
    • {env} - тип середовища (наприклад, development, alpha-testing, production тощо).

Рівень 2. Внутрішній файл:

Доступ до внутрішнього файлу: /{processdir}/config. Повний шлях до конкретної конфігурації:

`/{processdir}/config/{kind}.{env}.config.json`

де:

  • {processdir} - коренева директорія, з якої запущений процес (шлях до package.json).
  • {kind}.{env}.config.json - конфігураційний файл, де:
    • {kind} - тип ядра (може бути, calculator, display, visualizer).
    • {env} - тип середовища (наприклад, development, alpha-testing, production тощо).

Конфігурація ядра обчислень

порада

Конфігурація ядра обчислень поділяється на простори імен, детальний опис який вказаний в розділі "Давайте почнем".

Приклад заповнення конфігураційого файлу має наступний вигляд:

{
"adapters": {
"http": {
"port": 12000
}
},
"services": {
"logger": {
"enable": true
}
}
}

Конфігурація бізнес-схеми

інформація

X-Fiber підтримує опис власних конфігураційних значень, які в подальшому є можливість використовувати при написані бізнес-схеми завдяки простору імен discovery в агенті функціональності fnAgent, який надається в обробниках http запитів та ws подій.

Загальний опис власної конфігурації повинен мати такий вигляд:

{
"application": {
"SysAdmin": {
"callbackUrl": "http://localhost:38012"
}
}
}

Доступ до поля можливий завдяки простору імен discovery агента функціональності fnAgent:

// ...
const url = agents.fnAgent.discovery.getMandatory('SysAdmin.callbackUrl')
console.log(url) // http://localhost:38012
// ...
warning

Для опису та реєстрації власних конфігураційних даних сервіс відкриттів DiscoveryService використовує об'єкт application у загальній структурі конфігураційного файлу. Ці дані можуть мати будь-який рівень вкладеності. Під час завантаження конфігураційних файлів, сервіс відкриттів DiscoveryService використовує лише ті значення, які описані в цьому об'єкті, і додає їх до пам'яті ядра обчислень.

Щодо використання власних змінних, не потрібно додавати application до ключів, оскільки після завантаження конфігураційних файлів ядро обчислень автоматично відокремлює конфігураційні дані ядра обчислень від конфігураційних даних бізнес-схеми.