socketmq

Lightweight stream-oriented messaging library for node.

SocketMQ

Lightweight stream oriented messaging library.

SocketMQ supports req/rep and pub/sub messaging patterns. Messaging pattern is high level concept of how messages should be handled on sending and receiving. It's client/server & transport agnostic which means you can use all 4 types of messaging pattern no matter you are connected to a server or being connected from a client with any of the transports supported.

Each request will be sent to one connected client/server and wait for response (round-robin scheduler).

// example/rep.js 
var socketmq = require('../')
 
var smq = socketmq.bind('tcp://127.0.0.1:6363')
 
smq.on('bind', function() {
  console.log('rep bound')
})
 
smq.on('connect', function(stream) {
  console.log('new connection')
  smq.req('request from server', 'hello', function (msg) {
    console.log(msg)
  })
})
 
smq.rep('hello', function(msgreply) {
  console.log('requested msg:' + msg)
  reply('Hi ' + msg + ', world!')
})
// example/req.js 
var socketmq = require('socketmq')
 
var smq = socketmq.connect('tcp://127.0.0.1:6363')
 
smq.on('connect', function(stream) {
  console.log('req connected to server')
})
 
setInterval(function() {
  smq.req('hello', 'socketmq.req', function(msg) {
    console.log('replied msg:' + msg)
  })
}, 1000)
 
smq.rep('request from server', function (msgreply) {
  console.log('request from server', msg)
  reply('response from client')
})

A pub message will be distributed to all client/server connected and no response will be sent back. It's a fire and forget messaging pattern. Pub messages could be received by subscribing to the publishing topic.

// example/pub.js 
var socketmq = require('socketmq')
 
var smq = socketmq.connect('tcp://0.0.0.0:6363')
 
smq.on('connect', function() {
  console.log('pub connected');
  setInterval(function() {
    smq.pub('pub.test', 'hello')
  }, 1000)
})
// example/sub.js 
var socketmq = require('socketmq')
 
var smq = socketmq.bind('tcp://127.0.0.1:6363')
 
smq.on('bind', function() {
  console.log('sub bound')
})
 
smq.sub('pub.test', function(data) {
  console.log('got pub message: ' + data)
})