On a Mac:
$ brew install zmq
To verify the installation
$ man zmq
See zeromq.org
$ npm init
$ npm install zmq-json-pub --save
The complete project can be found in the examples/demo folder.
This example shows how to create a simple app that publishes a heartbeat JSON message every 3 seconds. The example JSON is completely arbitrary. You can specify your own JSON format.
File: examples/demo/config.js
var config = {};
config.endpoint = "tcp://*:5431";
config.interval = 3000; // micro seconds
module.exports = config;
File: examples/demo/index.js
"use strict";
var ZmqJsonPub = require('zmq-json-pub'),
config = require('./config'),
pub = new ZmqJsonPub();
pub.publish(config.endpoint);
let data = {
type: "heartbeat",
status: "OK",
message: 'service is running',
timestamp: Date.now()
}
function heartbeat() {
data.timestamp = Date.now();
console.log("sending heartbeat at " + new Date(data.timestamp));
pub.send(data, function(err) {
if (err) {
console.log(err);
return;
}
});
setTimeout(heartbeat, config.interval);
}
console.log("Sending heartbeat every " + config.interval / 1000 + " seconds")
setTimeout(heartbeat, config.interval);
/*
Handle termination can close pub.
*/
// terminator === the termination handler.
function terminator(sig) {
if (typeof sig === "string") {
console.log('%s: Received %s - terminating Node server ...',
Date(Date.now()), sig);
console.log("Closing publisher before exit");
pub.close();
process.exit(1);
}
console.log('%s: Node server stopped.', Date(Date.now()) );
}
// Process on exit and signals.
process.on('exit', function() { terminator(); });
['SIGHUP', 'SIGINT', 'SIGQUIT', 'SIGILL', 'SIGTRAP', 'SIGABRT', 'SIGBUS',
'SIGFPE', 'SIGUSR1', 'SIGSEGV', 'SIGUSR2', 'SIGPIPE', 'SIGTERM'
].forEach(function(element, index, array) {
process.on(element, function() { terminator(element); });
});
To run:
$ node index.js
To stop press Ctrl-C.
For an example of how to subscribe to JSON messages see the companion project:
https://www.npmjs.com/package/zmq-json-sub
Tests assume that mocha has been installed globally. If not execute the following:
$ npm install -g mocha
Run the tests from the projects root folder in one of the following ways:
$ mocha --recursive --timeout 20000
Or
$ npm test
Or if you feel like kickin' it old skool:
make test
To run the tests for each version (currently there is only one version (v0001)):
$ mocha --timeout 5000 --recursive test/v0001/*test.js
The tests generate log files in a logs/ folder under the projects root folder.
In lieu of a formal style guide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code.
- Wrapped send call in setTimeout
- Added sendDelay property (in micro seconds)
- Updated example to use published module
- Initial release