The Broker or Server plays the prime role in an MQTT (Protocol) based network. MQTT devices need MQTT broker to communicate with each other. MQTT broker is nothing but a central server connected to the Internet. The broker or server acts as a decision-maker which sits in between the devices. The clients do not know each other, they have to communicate via MQTT broker. The broker is mainly responsible for receiving all messages from publisher clients, filtering them, decide which subscriber is interested in it and then sending the messages to the subscribed clients. The MQTT broker also holds the session of all persisted clients including subscriptions and missed messages.
Fig. 1: Image showing icons of Popular Public MQTT Brokers
The MQTT broker should be continuously connected to the Internet so that whenever there is a request from the client to connect, publish a message or subscribe for a topic , the MQTT broker can process the request immediately. The MQTT broker can handle up to thousands of concurrently connected devices.
MQTT broker is the heart of this publish/subscribe protocol. The broker should be responsible for authentication and authorization security of the client so that no unauthorized client can access the MQTT broker. The important thing is that the broker should be highly scalable, integrate able into backend systems, easy to monitor and must be failure-resistant.
There are many types of public and private brokers available by different vendors. Some are free to use and for some, developers and users have to pay for access. Some of the Public brokers are as follow –
These public brokers are free to use and can be used for testing purpose. For example, a developer can install Mosquitto broker on his own server. There are also cloud based Platform as a Service (PaaS) brokers from cloud service providers like IBM, Microsoft (Azure), Amazon AWS, Heroku etc.
These brokers can be divided into two main categories –
1) Self-hosted brokers – These are personal brokers that run on an internal network or internet. A developer can install these brokers on his own server. In such case, the developer himself is responsible for installation and maintenance of server software and hardware. These brokers are generally used for testing purposes or for hosting local MQTT applications. Some examples of self hosted brokers are HiveMQ, Mosquitto, Mosca, VerneMQ, Thingstudio DesktopMQTT and emqttd.
2) Cloud based brokers – These are commercial brokers that run on internet and used for MQTT applications in which IOT devices are deployed at geographically diverse locations. There are cloud based brokers available from big IT companies like IBM, Microsoft, Google, Amazon etc. Many web hosting companies also provide these brokers. In such case, the developer is only responsible for installation and management of software while the server hardware is provided and maintained by the vendor. Some of the vendors also provide managed MQTT broker where even the server software and MQTT application is installed and managed by the vendor.
Let us discuss some of the public brokers (which can be installed on a personal server and used for testing purposes) –
1) HiveMQ – HiveMQ is a MQTT broker which is used to provide client to client communication. It is a self- hosted broker. It can be installed on the windows as well as Linux operating system. A developer can check basic MQTT applications with this broker using mqtt server broker.mqttdashboard.com for client to client communication. The HiveMQwebsocket client can also be used. This is a public broker which can be used for basic initial purposes. It is free of charge, already setup and ready to go. A client can be connected with HiveMQ using the following details –
Websocket Port: 8000
To download HiveMQ and try it for connecting a client check out the following tutorial –
2) Mosquitto – Mosquitto is an open source MQTT broker. It aims to provide the same feature as other brokers do that is client to client communication. It supports TSL/SSL transport layer security as well. It can be downloaded on a PC (windows and linux users) and can be used according to user’s requirements. Mosquitto broker is secured and can be used for basic MQTT applications. A client can be connected with Mosquitto using the following details –
Port: 1883 or 8883
For installing Mosquitto on Windows, check out the following tutorial –
For installing Mosquitto on Ubuntu Linux, check out the following tutorial –
For more details on using Mosquitto, check out its official documentation –
3) Adafruit – Adafruit recently opened up a broker called Adafruit.io for IoT dashboard. It provides highly secure broker. The user has to create an account and get a private key generated for the account to operate this broker. The user has to use that key in the application’s firmware to connect the clients to the broker. In that way, it provides security to the application as well. Adafruit also provides TLS/SSL security.
To create the topics, user has to create the feeds in the account. The user can see the output on the dashboard of his Adafruit broker. It is easy to operate this broker and can be used for the prototype applications.
In order to get started with Adafruit.io broker and start using it, check out the following tutorial –
4) Eclipse – Eclipse provides high quality M2M implementation tools and libraries. A developer can access the server/broker using the hostname iot.eclipse.org and port 1883. He can also access the server using encrypted port 8883. This encrypted port supports TLS/SSL transport security. The MQTT over Web Sockets can also be used both plain and secured. The plain MQTT over Websockets from eclipse can be connected using the following URI –
The secure MQTT over Websockets from eclipse can be connected using the following URI –
5) CloudMQTT – CloudMQTT are managed mosquitto servers/brokers in the cloud which provides light weight messaging protocol for publish and subscription model. It supports TLS/SSL transport layer security and websocket client to publish and subscribe the message. A client can be connected with CloudMQTT using the following details –
These ports can be found in the control panel of an instance:
Port 1XXXX: for plain text MQTT(means unencrypted messages)
Port 2XXXX: for MQTT over TLS
Port 3XXXX: for MQTT over websocket (TLS)
Check out the official CloudMQTT documentation for more details –
6) M2M.io – M2M.io is also used as a MQTT broker for M2M communications or client to client communication. A client can be connected with M2M.io using the following details –
It requires a signup or username and password for login. It is an easy and simple protocol for testing the prototypes.
7) VerneMQ – VerneMQ is a MQTT message broker. It also supports TLS/SSL security and has many features too. It supports websocket. For more details on VerneMQ, check out the following link –
Check out the list of publically-accessible MQTT brokers which can be used for testing and prototyping from the following link –
In the next tutorial, security issues in MQTT protocol will be discussed.
Filed Under: Featured Contributions