Finally an MQTT broker for Android!
This is a fork of the Moquette project for Android. There are a lot of files left which are not needed. The major parts in the modification is to use Gradle build system and to change logging to standard Android logging. It requires a fairly recent version of Android because of Java 1.7. Like 4.4 or something. You can probably fix it to support really old Android versions if you change some lines in the source.
To include it in your project you'll have to do the following: Download/checkout the project. Change your settings.gradle to something similar to this: (You might have to change your module name (:app) and the path to the project (../))
include ':app', ':broker', ':netty_parser', 'parser_commons'
project(':broker').projectDir = new File(settingsDir, '../moquette/broker/')
project(':netty_parser').projectDir = new File(settingsDir, '../moquette/netty_parser/')
project(':parser_commons').projectDir = new File(settingsDir, '../moquette/parser_commons/')
To start the server do
new Server().startServer();
This project does not solve problems like creating an Andorid service and such.
Most of the folloing information is still relevant but some things have changed...
Moquette aims to be a MQTT compliant broker. The broker supports QoS 0, QoS 1 and QoS 2.
Its designed to be evented, uses Netty for the protocol encoding and decoding part, the protocol logic is essentially a single threaded and it's isolated from front connectors part by LMAX disruptor's ring buffer.
[Freedomotic] (http://www.freedomotic.com/) Is an home automation framework, uses Moquette embedded to interface with MQTT world. Part of moquette are also used into the [Vertx MQTT module] (https://github.com/giovibal/vertx-mqtt-broker-mod), into MQTT spy and into [WSO2 Messge broker] (http://techexplosives-pamod.blogspot.it/2014/05/mqtt-transport-architecture-wso2-mb-3x.html).
Start play with it, download the self distribution tar from BinTray , the un untar and start the broker listening on 1883 port and enjoy!
tar zxf distribution-0.6-bundle-tar.tar.gz
cd bin
./moquette.sh
Starting from version 0.6 Moquette is OSGi compliant, to see it in action:
mvn clean install;
cd budle;
mvn install pax:provision
To embed Moquette in another maven project is sufficient to include a repository and declare the dependency:
<repositories>
<repository>
<id>bintray</id>
<url>http://dl.bintray.com/andsel/maven/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
Include dependency in your project:
<dependency>
<groupId>org.dna.mqtt</groupId>
<artifactId>moquette-broker</artifactId>
<version>0.6</version>
</dependency>
After a git clone of the repository, cd into the cloned sources and: mvn clean package
.
In distribution/target directory will be produced the selfcontained tar for the broker with all dependencies and a running script.
Here are some simple steps to do to configure Moquette to serve over SSL **Details ** Moquette uses JavaKeyStore? and certificates to handle SSL. In order to expose it over SSL you have create a keystore for the broker (select the password), exporting a certificate and define 4 variables into moquette.conf.
Create a keystore In a directory generate the keystore using the JRE's keytool:
keytool -keystore serverkeystore.jks -alias testserver -genkey -keyalg RSA
To make it work you have to answer at the first question, say moquette.dna.org and as password we could use passw0rdsrv for both (keystore and keymanger)
Export a certificate Then you need export a certificate:
keytool -export -alias testserver -keystore serverkeystore.jks -file testserver.crt
Imporing on the client side Supposing you have already created the keystore for the client side, (name it clientkeystore for example), we could import the certificate with:
keytool -keystore clientkeystore.jks -import -alias testserver -file testserver.crt -trustcacerts
It's done! We just need use the Paho client to connect to the server, check ServerIntegrationSSLTest.java integration test to see how.