From 3604c24a34254118fb593f2643ad8035edd65b68 Mon Sep 17 00:00:00 2001 From: Chris Woodruff Date: Fri, 13 Dec 2024 19:26:41 -0500 Subject: [PATCH] add the diagrams to chapter 12 --- .../MQTT-Publish-Subscribe-Model-Diagram.png | Bin 0 -> 37194 bytes Chapter12/Images/QoS-Level-Workflow-Diagram.png | Bin 0 -> 25615 bytes Chapter12/chapter12.md | 8 +++++++- 3 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 Chapter12/Images/MQTT-Publish-Subscribe-Model-Diagram.png create mode 100644 Chapter12/Images/QoS-Level-Workflow-Diagram.png diff --git a/Chapter12/Images/MQTT-Publish-Subscribe-Model-Diagram.png b/Chapter12/Images/MQTT-Publish-Subscribe-Model-Diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..f73faff506140334b7d5bf4f24edd572575813b2 GIT binary patch literal 37194 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
tiUMU*QNB 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 HGxq;q_InEY literal 0 HcmV?d00001 diff --git a/Chapter12/Images/QoS-Level-Workflow-Diagram.png b/Chapter12/Images/QoS-Level-Workflow-Diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..25388e865a6b61ece53251b27577b77068a20340 GIT binary patch literal 25615 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 literal 0 HcmV?d00001 diff --git a/Chapter12/chapter12.md b/Chapter12/chapter12.md index 4dea7528..07f42b4e 100644 --- a/Chapter12/chapter12.md +++ b/Chapter12/chapter12.md @@ -45,6 +45,10 @@ Then there’s AMQP, a heavyweight protocol designed for enterprise messaging. W The publish/subscribe model is at the heart of MQTT's brilliance, offering a refreshing alternative to the traditional request/response communication pattern. This design decouples message producers (publishers) from message consumers (subscribers), allowing devices to interact without knowing anything about each other. Instead, communication flows through a central hub known as the broker, which routes messages based on their associated topics. It's like a well-oiled messaging system where the broker acts as the post office, ensuring every message reaches its intended audience. +![](Images/MQTT-Publish-Subscribe-Model-Diagram.png) + +
MQTT Publish/Subscribe Model Diagram
+ In this model, publishers send data to a topic—a string-based identifier that organizes messages into categories. Think of a topic like a mailbox label. For instance, a temperature sensor might publish updates on the topic of `home/livingroom/temperature`. Subscribers interested in this data don't interact directly with the sensor. Instead, they subscribe to the topic, and the broker delivers the messages. This design not only decouples publishers and subscribers but also makes the system incredibly flexible and scalable. It liberates you from the need to maintain direct connections, empowering you to focus on your specific tasks. One of the key advantages of this model is its ability to support dynamic, real-time communication. A single topic can have multiple subscribers, allowing many devices or applications to simultaneously react to the same message. This real-time aspect of the model is not just a feature, it's an exciting potential that can be harnessed. For instance, a topic like `smartbuilding/alerts` could be used to notify a control panel, a mobile app, and an emergency system when an alarm is triggered. Similarly, a single subscriber can listen to multiple topics, enabling it to gather data from different sources without the overhead of managing individual connections. @@ -69,7 +73,9 @@ Quality of Service (QoS) levels are one of MQTT's most powerful features, provid MQTT defines three QoS levels: 0, 1, and 2. At QoS 0, also known as "at most once," the message is delivered without guarantees. The publisher sends the message, and if it's received by the subscriber, great—but if it's lost in transit, the publisher won't retry. This is the lightest and fastest option, making it ideal for use cases like periodic sensor updates where missing a single reading isn't critical. -// Graph +![](Images/QoS-Level-Workflow-Diagram.png) + +
QoS Level Workflow Diagram
QoS 1, or "at least once," introduces a handshake mechanism to ensure the message is delivered to the subscriber. The publisher retains the message until it receives an acknowledgment (ACK) from the broker. If no ACK is received, the message is resent. While this ensures every message is delivered, duplicates can occur if a message is resent before the original is processed. This level is perfect for scenarios where message delivery is essential but duplication is challenging, such as sending alerts or status updates.