1.1.27 • Published 3 years ago

ric-utils-rpc2 v1.1.27

Weekly downloads
-
License
-
Repository
-
Last release
3 years ago

ric-utils-rpc2

build status

Install

npm i --save ric-utils-rpc2
npm shrinkwrap

Usage

Инициализация контроллера

const Rpc = require('ric-utils-rpc2');
const amqp = require('ric-amqp');
const rabbitmq = amqp.createConnection();  

const rabbit = app.interfaces.transport.rabbitmq;
const config = {
    title: 'some-service',
    instanceId: 'unikalInstanceId' // instanceId Не обязательный параметр. По умолчанию null;
};

const rpc = new Rpc(rabbit, config);
rpc.setInstanceId('someInstanceId'); // Устанавливает instanceId для все существующих экземпляров Client и Server. вновь создаваемые экземпляры будут по умолчанию наследоваеть этот параметр.

Client

Инициализация клиента

const hostService = 'some-sercive';
const client = rpc.getClient(hostService); // hostService - имя сервера, переданное в конфигурации при инициализации (см. Server);
client.setInstanceId('someInstanceId'); // устанавливает значение instanceId - в метаинформацию о клиенете. Прикрепляется к каждому запросу в поле appId (см RpcCall)
client.setHeaders(); // Метод позволяет заменить заголовки, прикрепляемые к вызовам. принимает объект.
client.addHeaders('headerKey', 'headerValue') // Метод позволяет добавить заголовок 'headerKey' или зменить его на значение 'headerValue' в заголовки, прикрепляемые ко всем вызовам.
client.addHeaders({ headerKey1: 'headerValue2', ... }) // Принимает объект и примешивает его к уже установленным заголовкам, перезаписываю имеющиеся значения, если совпадают ключи

client.removeHeaders('headerKey1', 'headerKey2', ...) // Принимает ключb и удаляет их из заголовковж
client.removeHeaders(['headerKey1', 'headerKey2', ...]) // Принимает массив ключей и удаляет их из заголовков
client.removeHeaders({ headerKey1: 'headerValue1', ... }) // Принимает объект и удаляет все ключи заголовков соотвествующие переданному объекту при условии нестрогого равенства значений

Вызов удаленной функции

const method = 'some-method';
const params = { arg1: 'test' };
const headers = { headerKey1: 'headerValue' }; // Значения этого объекта влияют на маршрутизацию (см Routing)
const options = {
    await: 30000 // Длительность ожидания ответа в милисекундах. По умолчанию принимает значение 30000
    broadcast: true // Допустимо любое значение. При выполнении условия if (optiosn.broadcast) вызов замораживается на время options.await и собирает данные с произвольного количества rpc-серверов. После окончания времени ожидания возвращает результат в callback-функцию. 
};


client.call({ method, params, headers }, options (err, res) => { ... });

Использование proxy-клиента

Proxy-клиент позволяет вызывать методы удаленного сервера в упрощенном виде - при помощи camelCase нотации, как будто это вызов локального метода клиента. При этом доступны все функции из примера выше и стандартный способ вызова удаленной функции.

const hostService = 'some-sercive';
const proxyClient = rpc.getProxyClient(hostService); // hostService - имя сервера, переданное в конфигурации при инициализации (см. Server);

const params = { arg1: 'test' };
const headers = { headerKey1: 'headerValue' }; // Значения этого объекта влияют на маршрутизацию только создаваемого запроса (см. Routing)
const options = {
    await: 30000 // Длительность ожидания ответа в милисекундах. По умолчанию принимает значение 30000
    broadcast: true // Допустимо любое значение. При выполнении условия if (optiosn.broadcast) вызов замораживается на время options.await и собирает данные с произвольного количества rpc-серверов. После окончания времени ожидания возвращает результат в callback-функцию. 
};

proxyClient.someMethod(params, headers, options, (err, result) => { ... }); // Данный вызов полностью эквивалентен вызову из предыдущего примера 'someMethod' транслируется в 'some-method';

Вызов удаленной функции из proxy-клиента не требует передачи всех аргументов. Ниже приведены ВСЕ допустимые комбинации аргументов:

proxyClient.someMethod(params, headers, options, callback);
proxyClient.someMethod(callabck); // params = {}, headers = {}, options = {};
proxyClient.someMethod(params, callback); // headers = {}, options = {};
proxyClient.someMethod(params, headers, callback); // options = {};

Все аргументы, используемые при создании вызова влияют только на один создаваемые в текущий момент вызов.

Server

Инициализация сервера

const hostService = 'some-sercive';
const instanceId = 'unicInstanceId';
const server = rpc.getServer(hostService); // hostService - имя, по которому сервер доступен клиентам (см. Client);
server.setInstanceId('someInstanceId'); // устанавливает значение instanceId - в метаинформацию о клиенете. Прикрепляется к каждому запросу в поле appId (см RpcCall)
const binding = {
    arguments: {
        to: hostService, // Заголовок, определяющий маршрутизацию пакета по типу сервиса (см. Routing)
        toInstance: instanceId // Заголовок, определяющий маршрутизацию пакета по id сервиса (см. Routing)
    }
};
server.bind(binding, err => { ... });

Добавление метода

server.addMethod('some-method', function () { ... });

Обработчики методов могут принимать от 1 до 3 аргументов. В случае, если функция явно не принимает аргументы или использует spread-конструкцию, количество аргументов принимается за 3. Ниже приведены возможные варианты объявления обработчика:

server.addMethod('some-method1', function () { ... }); // arguments = { 0: rpcCall, 1: params, 2: callback }
server.addMethod('some-method1', function (...args) { ... }); // args = [rpcCall, params, callback]
server.addMethod('some-method1', function (callback) { ... });
server.addMethod('some-method1', function (params, callback) { ... });
server.addMethod('some-method1', function (rpcCall, params, callback) { ... });

RpcCall