This article will cover installing Mosca Node.js MQTT standalone broker service along side Redis on Ubuntu 14.04. MQTT is a light weight publish-subscription messaging protocol for use on top of the TCP/IP.
MQTT is designed for connections with remote locations where network bandwidth is limited. The Pub/Sub messaging pattern requires a message broker which is what is covered in this article. The broker distributes messages to clients subscribers based on the topic of a message.
Step 0
Time Matters!
sudo apt-get update
sudo ntpdate pool.ntp.org
sudo apt-get install ntp
Step 1
Install Redis
sudo apt-get install build-essential
sudo apt-get install tcl8.5
wget http://download.redis.io/releases/redis-3.0.0.tar.gz
gunzip -c redis-3.0.0.tar.gz | tar -xvf -
cd redis-3.0.0/
sudo make
sudo make install
Step 2
Start the Redis Server
cd utils/
sudo ./install_server.sh
Step 3
Install Mosca, and some helpful node packages
sudo apt-get update
sudo apt-get install nodejs
sudo ln -s /usr/bin/nodejs /usr/bin/node
sudo apt-get install npm
sudo npm install debug
sudo npm install mosca bunyan -g
sudo npm install daemon
Step 4
Create your Mosca Node.js MQTT Broker Service mosca-app.js
console.log(process.pid);
require('daemon')();
var mosca = require('mosca')
var backjack = {
type: 'redis',
db: 12,
port: 6379,
return_buffers: true,
host: "localhost"
};
var moscaSettings = {
port: 1883,
backend: backjack,
persistence: {
factory: mosca.persistence.Redis
}
};
var server = new mosca.Server(moscaSettings);
server.on('ready', setup);
server.on('clientConnected', function(client) {
console.log('client connected', client.id);
});
server.on('published', function(packet, client) {
console.log('Published', packet.payload);
});
function setup() {
console.log('Mosca server is up and running')
}
console.log(process.pid);
Step 5
Start the Mosca Node.js MQTT Broker Service
node mosca-app.js
Step 6
Install MQTT Client For Testing
sudo npm install mqtt -g
Step 7
Write a MQTT Publishing Client client-pub.js
var mqtt = require('mqtt');
var client = mqtt.connect('mqtt://localhost');
client.on('connect', function () {
client.publish('presence', 'Hello!', {retain: false, qa: 1});
client.end();
});
Step 8
Write a MQTT Subscription Client client-sub.js
var mqtt = require('mqtt');
var client = mqtt.connect('mqtt://localhost');
client.on('connect', function () {
client.subscribe('presence');
client.on('message', function (topic, message) {
console.log(message.toString());
client.end();
});
});
Step 9
Open a New Terminal and Execute your MQTT Subscription Client client-sub.js
node client-sub.js
Step 10
Open a New Terminal and Execute your MQTT Publish Client client-pub.js
node client-pub.js
Successful Output From client-sub.js terminal
Hello!
I will write a followup article on scaling Mosca soon for production.