@sash/shuttle
v1.0.24
Published
RabbitMQ RPC for internal needs.
Readme
Shuttle
This is an experimental library for internal use that helps you quickly create RPC services without unnecessary code. RabbitMQ is used as a transport.
Это экспериментальная библиотека для внутреннего использования, помогает быстро создавать RPC сервисы без лишнего кода. В качестве транспорта используется RabbitMQ, ничего другого на данный момент не планируется.
Основная идея.
На "сервере":
- Пользователь описывает логику сервиса в виде класса в typescript
- Публичные методы помечает декоратором @method
- Отгружает это в Shuttle.addAction()
- Shuttle публикует нужные очереди и прочее и обеспечивает удаленный вызов методов
На "клиенте":
- Пользователь получает дефинишены (это можно сделать разными способами)
- Получает экземпляр удаженного "класса" через Shuttle.getRemoteAction()
- Вызывает нужные ему методы и получает результат как обычно
- Подписывается на события
- IDE дает подсказочки, ts следит за простыми ошибками т.к. есть дефинишены
Как начинать
------ Надо бы здесь что-то про установку ...
------ Надо бы здесь что-то про конфигурацию ...
Для того чтобы начать, нужно создать экземпляр своего класса и отправить его в Shuttle:
export class SomeClass {
protected factor = 5;
@method()
public async methodName(x: number, y: number): Promise<number> {
return this.sum();
}
private sum(x: number, y: number): number {
return (parseInt(x) + parseInt(y)) * this.factor;
}
}
const someObject = new SomeClass();
const shuttle = new Shuttle();
shuttle.addAction('ActionName', someObject);
shuttle.begin();
Код на клиентской стороне при этом буде выглядеть так:
const shuttle = new Shuttle();
const main = async () => {
const action = await shuttle.getRemoteAction<SomeClass>('ActionName');
const result = await action.methodName(2, 3);
};
