0.1.0 • Published 7 years ago
microsquad v0.1.0
Быстрый минималистичный фреймворк для создания распределенных сервисов на node
microservice
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
0.1.0
7 years ago