microsquad

0.1.0 • Public • Published

Быстрый минималистичный фреймворк для создания распределенных сервисов на node

microservice

[cool-badles-list]

npm install microservice
const { Service } = require('microservice')
const service = new Service({ name: 'test-service', version: '0.0.1' })
 
await service.init()
await service.add('test-task', () => 'success')
 
// subscribe to task execution result (event-driven behavour)
await service.subscribe('test-task',
  output => console.log(output)) // "success"
 
// run local task using load-balancer between distributed service instances
const result = await service.run('test-task')
console.log(result) // "success"
 
// run remote task using transport service autodiscovery
const result2 = await service.request({ service: 'test-service', task: 'test-task' })
console.log(result2) // "success"
 

Features

  • promise-based
  • single interaction interface between services mesh
  • ability to create services using most suitable transport
  • versioning support
  • different modes: event-sourcing, command pattern
  • features support: load balancing, services autodiscovery, request routing, fault injection, encryption {depens on the choosen transport}
  • internal metrics, automati service map, request profiling {not yet implemented}

API

Init service instance

.init() => Promise(serviceInstance)

Происходит подключение указаных транспортов, настройка соединений и т.п. Данная операция должна быть выполнена при старте каждого сервиса.

const { Service } = require(''microservice'')
const service = new Service(options)
await service.init()

options:

Name Description Format
name Required. Readable service name. string: ^[a-z0-9-_]+$
version Required. Service version. string: semver
transports Required. List of supported transports and their settings. Default: [{"name":"local","type":"local","default":true}] array
routes Routing table for external requests (in case if transport does not support routing). object
timeout Default task timeout in ms. number
slow Emit "slow" event after specified delay in ms. number
local Do not emit task events globally. Default: false boolean

Add new service task

.add(task, method) => Promise()

.add(options | taskName, method) => Promise()

Name Description Format
task Required. undefined string: ^[a-z0-9-_.]+$
version string: version

Run local task with distributed load-balancing environment

.run(task, ...arguments) => Promise(result)

.run(options, ...arguments) => Promise(result)

This task will be launched by the most suitable service instace. Other services can .subscribe to the execution result.

Name Description Format
task Required. undefined string: ^[a-z0-9-_.]+$
local undefined Default: false boolean
skipEvent undefined Default: false boolean
timeout number
slow number

Run task from remote service.

.request(service, task, ...arguments) => Promise(result)

.request(options, ...arguments) => Promise(result)

Name Description Format
task Required. undefined string: ^[a-z0-9-_.]+$
service Required. undefined string: ^[a-z0-9-_]+$
timeout number
slow number
services array

Subscribe to task execution result.

.subscribe(eventHandler) => Promise()

.subscribe(task, eventHandler) => Promise()

.subscribe(task, service, eventHandler) => Promise()

.subscribe(options, eventHandler) => Promise()

Name Description Format
task string: ^[a-z0-9-_.]+$
source string: ^[a-z0-9-_]+$
match object

events

slow

Transports

Name Description Format
name Required. Transport name. string: ^[a-z0-9-_]+$
type Required. Transport driver name. string: ^[a-z0-9-_]+$
default Act as default transport. Default: false boolean

Tests

To run the test suite, first install the dependencies, then run npm test:

$ npm install
$ npm test

License

Readme

Keywords

none

Package Sidebar

Install

npm i microsquad

Weekly Downloads

0

Version

0.1.0

License

ISC

Last publish

Collaborators

  • afoninsky