1.1.1 • Published 5 years ago
ms-udp v1.1.1
ms-udp
Solution for communication between services using UDP protocol with built-in auto-retry & round-robin balancing. 🔬
Install
$ npm i ms-udp -S
Examples
There are some simple examples.
API
Server
.constructor()
const server = new udp.Server();
.on(action, ...middlewares)
event
[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type) Action name...middlewares
[function[]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function) Action middlewares
This method creates action.
const { Balances } = require('./db');
server.on('get', async (ctx) => {
const { amount } = await Balances.findOne({
userId: ctx.payload.userId,
});
ctx.reply(amount);
});
.use(...middlewares)
...middlewares
[function[]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function) Common middlewares
This method creates common middlewares.
.listen(port, host, callback)
port
[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type)host
[?string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type)callback
[?function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function)
This method starts listening.
Client
.constructor(options)
options
[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)services
[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object) Available services[key]
- [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type) Service name[value]
- <string / Array[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type)> Service's address
const client = new udp.Client({
services: {
balances: '127.0.0.1:3000',
},
});
.mock(requests)
requests
[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)
This method save mocks responses for .ask
.
if (process.env.NODE_ENV === 'test') {
client.mock({
balances: {
get: 200,
},
users: {
create: payload => payload.userId >= 100,
},
});
}
const [balance, badUser, goodUser] = await Promise.all([
client.ask('balances.get', { userId: 1 }),
client.ask('users.create', { userId: 10 }),
client.ask('users.create', { userId: 200 }),
]);
console.log(balance); // => 200
console.log(badUser); // => false
console.log(goodUser); // => true
.ask(name, payload, options)
event
[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type) Event name in format<service_name>.<action>
payload
[?Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object) Event dataoptions
[?Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object) Optionsattempts
[?number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type) Maximum number of attempts (default: 5)timeout
[?number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type) Maximum timeout in ms (default: 5000)
This method asks other service for something.
app.use(async (ctx, next) => {
const isAuth = await ctx.udp.ask('users.checkAuth', {
login: ctx.query.login,
password: ctx.query.password,
});
ctx.assert(isAuth, 403);
await next();
});
.middleware()
This method returns middleware for Koa or Express.
const Koa = require('koa');
const { Client } = require('ms-udp');
const app = new Koa();
const client = new Client();
app.use(client.middleware());
app.use((ctx) => {
ctx.body = 'Hello, world!';
});
app.listen(3000);