socketmq
v0.12.0
Published
Lightweight messaging library for node & browser.
Downloads
25
Readme
SocketMQ
Lightweight messaging library for node & browser.
Messaging Types
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.
Request/Response
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");
});
var event = "hello"; // or you can call it topic or channel.
smq.on("connect", function(stream) {
console.log("new connection");
smq.req(event, "request from server", function(msg) {
console.log(msg);
});
});
smq.rep(event, function(msg, reply) {
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("hello", function(msg, reply) {
console.log("request from server", msg);
reply("response from client");
});
Publish/Subscribe
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);
});
Using tags
SocketMQ can tag the streams and send messages to streams with specific tags.
var socketmq = require("socketmq");
var tcpUri = "tcp://127.0.0.1:6363";
var smq = socketmq.connect(tcpUri, function(stream) {
// Tag the stream.
smq.tag(stream, "tcp");
});
var tlsUri = "tls://127.0.0.1:46363";
smq.connect(tlsUri, function(stream) {
smq.tag(stream, "tls");
});
// Then send messages using `reqTag` of `pubTag`
// `req` message only to server with `tcp` tag
smq.reqTag("tcp", "hello", "message", function() {
// ...
});
// `pub` message only to server with `tls` tag
smq.pubTag("tls", "hello", "message");