Pub/Sub Messaging
Peter Hanzlík
peterhanzlik@gmail.com
Source: http://imgs.xkcd.com/comics/standards.png
What is Pub/Sub Messaging
Real Example
ISO/OSI
Common Properties
• Minimal Overhead (Low Bandwidth)
• Real-time (Low Latency)
• Push instead of Pull
• Reliable (even in Unreliable Networks)
Topic
• At least 1 character
• May include spaces
• Case-sensitive
Topic Filtration - Wildcards
Note: Cannot be used for Publish
Quality of Service
QoS 0 | At most once
QoS 1 | At least once
QoS 2 | Exactly once
* Applies to MQTT protocol only, other
protocols implement similar QoS options
Retained Messages
• Last known good value for the specified topic
• Every time a new client subscribes to that specific topic, it will
instantly receive the last retained message on that topic
• Any message may be send as retained
Last Will & Testament (LWT)
• Defined at the connection to the broker
• When client disconnects unexpectedly, broker sends this message on
clients behalf
Persistent Session
• Broker stores session information including:
• All subscriptions of the client
• All QoS 1 / 2 messages which are not processed yet
• All QoS 1 / 2 messages the client missed while being offline
Bridge
• Message forwarding
• Direction: in | out | both
• Broker behaves like a client to another broker
• Bridge handled by Broker, not by protocol
Security
• Username / Password (ACL, DB, LDAP)
• SSL/TLS (X509), SASL
• OAuth 2, Kerberos, OpenID Connect, …
• Payload encryption/signing
MQTT
• Easy and Lightweight
• Data agnostic (Message centric)
• Binary
• Open
AMQP
• Queue Federation, Load Balancing, Advanced Security (SASL)
• ISO/IEC Standard
• PCI DSS Compatible (IT Audit)
Architecture Cloud 1 Cloud 2
MQTT MQTT MQTT MQTT
AMQP AMQP
AMQP
Site 1 Site 2
DDS – Data Distribution Service
• Decentralized
• Dynamic Discovery
• Real-time
• High-performance
• Advanced Security
• Data Centric
Pub/Sub Brokers Examples
• Mosquitto:
• MQTT
• Open-source
• WebSocket support
• HiveMQ:
• MQTT
• High-performance
• Clustering
• Enterprise Solution
• WebSocket support
• RabbitMQ:
• AMQP
• Plugins: MQTT, STOMP
• Apache ActiveMQ:
• JMS
• Plugins: MQTT, AMQP, STOMP
• IBM WebSphere MQ
Pub/Sub Brokers – Cloud Based
• CloudMQTT.com (Mosquitto)
• CloudAMQP.com (RabbitMQ)
• Google Cloud Messaging
• Amazon SNS (Simple Notification
Service)
Test Brokers:
• broker.mqttdashboard.com (Hive MQ)
• test.mosquitto.org (Mosquitto)
• iot.eclipse.org (Mosquitto)
Pub/Sub Client Libraries – MQTT Examples
• Arduino
• NodeMCU
• mbed
• MQTT.js
• ruby-mqtt
• Mosquitto-PHP
• Eclipse Paho (C, C++, Java, Javascript, Python, Go, C#)
Demo 1
SSID: MQTT_Broker
Broker IP: 192.168.1.1
Broker Port: 1883 (default)
Authentication: none
Demo 2
MQTT Bridge
MQTT Bridge
STOMP
WebSocket
(Paho)
Arduino MQTT Client
NodeMCU MQTT
MQTT
HTTP
Q&A
Thank you for your attention
Reference
• http://www.hivemq.com/blog/mqtt-essentials-part-1-introducing-
mqtt
• http://www.prismtech.com/sites/default/files/documents/Messaging
-Whitepaper-040615_1.pdf
• https://azure.microsoft.com/en-us/documentation/articles/service-
bus-amqp-overview/
• https://github.com/knolleary/pubsubclient

Pub/Sub Messaging