0.1.0 • Published 7 years ago

microsquad v0.1.0

Weekly downloads
-
License
ISC
Repository
-
Last release
7 years ago

Быстрый минималистичный фреймворк для создания распределенных сервисов на 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:

NameDescriptionFormat
nameRequired. Readable service name.string: ^a-z0-9-_+$
versionRequired. Service version.string: semver
transportsRequired. List of supported transports and their settings. Default: [{"name":"local","type":"local","default":true}]array
routesRouting table for external requests (in case if transport does not support routing).object
timeoutDefault task timeout in ms.number
slowEmit "slow" event after specified delay in ms.number
localDo not emit task events globally. Default: falseboolean

Add new service task

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

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

NameDescriptionFormat
taskRequired. undefinedstring: ^a-z0-9-_.+$
versionstring: 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.

NameDescriptionFormat
taskRequired. undefinedstring: ^a-z0-9-_.+$
localundefined Default: falseboolean
skipEventundefined Default: falseboolean
timeoutnumber
slownumber

Run task from remote service.

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

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

NameDescriptionFormat
taskRequired. undefinedstring: ^a-z0-9-_.+$
serviceRequired. undefinedstring: ^a-z0-9-_+$
timeoutnumber
slownumber
servicesarray

Subscribe to task execution result.

.subscribe(eventHandler) => Promise()

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

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

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

NameDescriptionFormat
taskstring: ^a-z0-9-_.+$
sourcestring: ^a-z0-9-_+$
matchobject

events

slow

Transports

NameDescriptionFormat
nameRequired. Transport name.string: ^a-z0-9-_+$
typeRequired. Transport driver name.string: ^a-z0-9-_+$
defaultAct as default transport. Default: falseboolean

Tests

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

$ npm install
$ npm test

License