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