0.6.1 • Published 6 years ago

picom v0.6.1

Weekly downloads
8
License
MIT
Repository
github
Last release
6 years ago

Introduction

Picom(pico-message) is a high performance, self-discovery(nats.io), micro services communication layer.

Inner workings

Picom uses (nats.io) to send messages between services.

Each service has a name, and exposed methods.Services sharing the same name, are expected to expose the same methods and be the same, because they will be load balanced.

Each message is a JSON, and it's expected to be relatively small (a few kb's).

Quick start

npm install picom

Then, on device 1:

var Picom = require('picom');
var service1 = new Picom('service1');
service1.expose({
    add: function(msg) {
      return Promise.reslove({hello: 'from service 1', result: msg.a + msg.b});
    },
    returnError: function(msg) {
      return Promise.reject('something went wrong');
    }
});

On device 2:

var Picom = require('picom');
var service2 = new Picom('service2');
service2.request('service1.add', {
    a: 2,
    b: 5
}).then(function(msg) {

    // Prints 7
    console.log(msg.result);
});

myService.request('service1.returnError').
catch(function(err) {
    // err is instance of Error with message: 'something went wrong'
    console.log(err);
});

API

Picom('serviceName', options)

Initialize a new picom service.

Parameters:

  • servers (String, default: '127.0.0.1:4222'): Nats.io address
  • ttl (Integer, default: 30): After how many seconds of no response the server is considered "failing"
  • retries (Integer, default: 3): How many times try reconnect (to different hosts)
  • port (Integer, default: random): Used to specify a port, if omitted, a random port will be chosen

picom.expose(methods)

Expose methods and start listening.

Usage

myService.expose({
    add: function(msg) {
      return Promise.resolve(msg.a + msg.b);
    }
});

picom.request(service, msg, options)

Send request to remote service

Parameters:

  • service (String, mandatory): Service name + method name, like 'serviceName.methodName'
  • msg (Object, optional): Will become msg in remote service
  • options (Object, options): for now, you can only define request timeout

Usage

// Service 1
const Picom = require('picom');
const service1 = new Picom('service1');
service1.expose({
    add: function(msg) {
      return Promise.resolve({result: msg.a + msg.b});
    }
});
// Service 2
const Picom = require('picom');
const service2 = new Picom('service2');
service2.request('service1.add', {
    a: 2,
    b: 5
}, {
    timeout: 30 * 1000 // 30 seconds timeout
}
});

picom.publish(service, msg)

Send request to remote service, without waiting for a reply

Parameters:

  • service (String, mandatory): Service name + method name, like 'serviceName.methodName'
  • msg (Object, optional): Will become msg in remote service

Usage

const Picom = require('picom');
const service1 = new Picom('service1');

service1.expose({
    fib: function(msg) {
        // Do heavy lifting calculations, then notify service2, using picom or other channel
    }
});
const Picom = require('picom');
const service2 = new Picom('service2');

service2.publish('service1.fib', {
    x: 9000
}
});

picom.close()

Inform nats.io to not send anymore requests here, and disconnect.

0.6.1

6 years ago

0.6.0

6 years ago

0.5.9

9 years ago

0.5.8

9 years ago

0.5.7

9 years ago

0.5.6

9 years ago

0.5.5

9 years ago

0.5.4

9 years ago

0.5.3

9 years ago

0.5.2

9 years ago

0.5.1

9 years ago

0.5.0

9 years ago

0.4.3

9 years ago

0.4.2

9 years ago

0.4.1

9 years ago

0.4.0

9 years ago

0.3.5

9 years ago

0.3.4

9 years ago

0.3.3

10 years ago

0.3.2

10 years ago

0.3.1

10 years ago

0.3.0

10 years ago

0.2.7

10 years ago

0.2.6

10 years ago

0.2.4

10 years ago

0.2.3

10 years ago

0.2.2

10 years ago

0.2.1

10 years ago

0.2.0

10 years ago

0.1.2

10 years ago

0.1.1

10 years ago

0.1.0

10 years ago

0.0.1

10 years ago