Брокер повідомлень
Документ "Брокер" відповідає за опис слухачів amqp
повідомлень. Він визначає назви повідомлень,
структуру цих повідомлень, а також слухачів цих повідомлень. Брокер повідомлень відіграє ключову роль при побудові
взаємодії між сервісами.
Архітектура
Робота з повідомленнями має два напрямки - прослуховування повідомлень та генерація повідомлень.
Прослуховування
При необхідності опису слухачів повідомлень в предметній області необхідно створити опис документа "Брокер" з переліком необхідних обробників.
Документ "Брокер" повинен бути зареєстрований в документі "Реєстр" предметної області, яка в свою чергу, має бути зареєстрована в відповідному сервісі, включеному до бізнес-схеми. Це гарантує, що при запуску ядра обчислень будуть завантажені всі слухачі повідомлень. При завантаженні бізнес-схеми всі слухачі запускаються, що надає можливість прослуховування повідомлень.
На відміну від адаптерів протоколів, джерелом взаємодії є спілкування через http
чи ws
протоколи, брокер повідомлень
взаємодії з сервером брокера повідомлень. X-Fiber
використовує RabbitMQ
, як сервер брокера повідомлень. Коли
створюється повідомлення, воно надається серверу брокера повідомлень, який вже сам направляє на відповідні сервера, які
прослуховують відповідний тип повідомлення.
Такий механізм взаємодії закладає архітектурно слідуючий життєвий цикл, за яким працює X-Fiber
:
- Завантажити бізнес-схеми, а саме, завантаження опису повідомлень з їх обробниками.
- Створити зʼєднання з сервером брокера повідомлень.
- Підписатись на всі повідомлення, які описані в бізнес-схемі.
Генерація
Опис генерації повідомлень знаходиться в активній розробці.
Склад
Брокер повідомлень поєднує дві фунції - опис деталей слухача повідомлень та створення обробника повідомлень.
Загальна структура брокера
Брокер повідомлень описується як key-value
обʼєкт, де key
назва повідомлення, а value
опис деталей обробки цього
повідомлення. Деталі повідомлення являють собою різновид опцій, в залежності від типу взаємодії, а також обробник цього
повідомлення.
type CommunicationKind = 'queue' | 'exchange';
type AuthScope = "public" | "private";
type Version = "v1" | "v2" | "v3" | "v4" | "v5" | string;
export type BrokerHandler = (
...args // ... handler args
) => Promise<void>
type QueueOptions = {
// ... options structure
}
type ConsumeOptions = {
// ... options structure
}
type ExchangeOptions = {
// ... options structure
}
interface BaseTopic {
communication: CommunicationKind;
scope: AuthScope;
version: Version;
handler: BrokerHandler;
}
interface QueueTopic extends BaseTopic {
type: "queue";
queue?: QueueOptions;
consume?: ConsumeOptions;
}
interface ExchangeTopic extends BaseTopic {
type: "exchange";
exchange?: ExchangeOptions;
consume?: ConsumeOptions;
}
type Topic = QueueTopic | ExchangeTopic;
type BrokerStructure<T extends string = string> = {
[key in T]: Topic;
};
де:
CommunicationKind
- можливий тип взаємодії. Підтримуються наразі слідуючі типи взаємодії:queue
- взаємодія через черги, таexchange
взаємодія через обмінники повідомлень.Handler
- тип обробника повідомлень.QueueOptions
- опції налаштування черги.ConsumeOptions
- опції налаштування слухача черги.ExchangeOptions
- опції налаштування обмінника.Topic
- структура деталей повідомлення.BrokerStructure
- структура брокера повідомлень.
Деталі повідомлення
Деталі повідомлення складаються з:
- Типу комунікації (за замовчуванням
queue
). - Типу приватизації (за замовчуванням
public
). - Версії повідомлення (за замовчуванням
v1
). - Опції налаштування слухача черги (за замовчуванням
{}
). В - Опції налаштування черги (за замовчуванням
{ durable: true }
). Доступний коли тип комунікації "queue" - Опції налаштування обмінника (за замовчуванням
{}
). Доступний коли тип комунікації "exchange"
Тип комунікації
Опис комунікації через черги та через обмінники повідомлень знаходиться в активній розробці.
Тип приватизації
Опис типів приватизації знаходиться в активній розробці.
Версія
Версія слухача повідомлень дозволяє відокремити минулі реалізації слухачів з якими працюють від повідні джерела взаємодії від нової, що спрощує підтримку API без потреби створювати слухачі аналогічного призначення з словами синонімами.
За замовчуванням кінцевому маршруту присвоюється версія v1
. Окремо варто підкреслити, що версії потрібно вказувати v1 / v2 / v3 / v4 і т.д.
Опції налаштування слухача черги
Опис опцій налаштування слухача черги знаходиться в активній розробці