MQTT 发布订阅模式简述

MQTT 是基于 发布(Publish)/订阅(Subscribe) 模式来进行通信及数据交换的,与 HTTP 的 请求(Request)/应答(Response) 的模式有本质的不同。

订阅者(Subscriber) 会向 消息服务器(Broker) 订阅一个 主题(Topic) 。成功订阅后,消息服务器会将该主题下的消息转发给所有的订阅者。

主题(Topic)以 ‘/’ 为分隔符区分不同的层级。包含通配符 ‘+’ 或 ‘#’ 的主题又称为 主题过滤器(Topic Filters),不含通配符的称为 主题名(Topic Names) 。例如:

sensor/1/temperaturesensor/1/#sensor/+/temperature

MQTT Broker 简介

MQTT Broker 定义及其作用

MQTT Broker 也称为 MQTT 消息服务器,它可以是运行了 MQTT 消息服务器软件的一台服务器或一个服务器集群。MQTT Broker 负责接收来自客户端的网络连接,并处理客户端的订阅/取消订阅(Subscribe/Unsubscribe)、消息发布(Publish)请求,同时也会将客户端发布的消息转发给其他订阅者。

MQTT Broker 广泛应用于:电力、新能源、智慧城市、智能家居、智能抄表、车联网、金融与支付、运营商等行业。

常见开源 MQTT Broker

  • EMQ X - EMQ X 基于 Erlang/OTP 平台开发,是开源社区中最流行的 MQTT 消息服务器。除了 MQTT 协议之外,EMQ X 还支持 MQTT-SN、CoAP、LwM2M、STOMP 等协议。目前,EMQ X 在全球市场已有 5000+ 企业用户,20+ 世界五百强合作伙伴。
  • Eclipse Mosquitto - Mosquitto 是开源时间较早的 MQTT Broker,它包含了一个C/C ++的客户端库,以及用于发布和订阅的 mosquitto_pubmosquitto_sub 命令行客户端。Mosquitto 比较轻量,适合在从低功耗单板计算机到完整服务器的所有设备上使用。
  • VerneMQ - VerneMQ 基于 Erlang/OTP 平台开发,是高性能的分布式 MQTT 消息代理。它可以在硬件上水平和垂直扩展,以支持大量并发客户端,同时保持较低的延迟和容错能力。
  • HiveMQ CE - HiveMQ CE 是基于 Java 的开源 MQTT 消息服务器,它完全支持 MQTT 3.x 和 MQTT 5,是 HiveMQ 企业版消息连接平台的基础。

MQTT Broker 实现的主要功能

协议接入

  • 完整的 MQTT V3.1/V3.1.1 及 V5.0 协议规范支持;
  • MQTT-SN 、CoAP、lwM2M 等物联网协议接入支持。

集群部署

多服务器节点集群,且支持节点的自动发现。相对于单服务器,集群能通过多台服务器之间的协作带来以下优势:

  • 高可用性。单台或少量的服务器故障并不会导致整个消息服务中断,其余的正常工作的节点可以继续提供服务;
  • 负载均衡。通过负载均衡机制,集群可以把负载平均的分布在各个节点;
  • 更高的整体性能。相比单机部署,多节点的集群能够成倍的提升整个系统的连接和消息处理能力;
  • 可扩展性。可以通过在集群中添加新节点的方式来完成扩容而无需停机。

接入安全

  • SSL、WSS 加密连接,及单/双向安全认证支持;
  • 客户端 ID、IP 地址、用户名密码、LDAP 及浏览器 Cookie 认证支持;
  • 基于客户端 ID、IP 地址、用户名的访问控制(ACL);
  • 消息速率、连接速率限制。

数据持久化

数据持久化的主要使用场景包括将客户端上下线状态,订阅主题信息,消息内容,消息抵达后发送消息回执等操作记录到 Redis、MySQL、PostgreSQL、MongoDB、Cassandra 等各种数据库中。

其他功能

  • HTTP 消息发布接口支持,使上层应用能更方便的通过 REST API 给设备发送消息;

  • MQTT Broker 桥接,支持不同 MQTT Broker 或不同集群之间的消息桥接。桥接可以很方便的将消息桥接到云服务、流式服务、或其他 MQTT 消息服务器。桥接可以完成一些单纯使用集群无法实现的功能:跨 VPC 部署、支持异构节点、提高单个应用的服务上限;

  • 支持共享订阅。共享订阅是一种机制,允许将订阅组的消息分发均匀地分发给订阅组成员。在共享订阅中,订阅同一主题的客户机依次接收此主题下的消息。同一消息不会发送给多个订阅客户端,从而实现多个订阅客户端之间的负载均衡;

  • 规则引擎支持,用于配置消息流与设备事件的处理、响应规则。规则描述了数据从哪里来如何筛选并处理数据处理结果到哪里去三个配置,即一条可用的规则包含三个要素:触发事件(满足某个条件时触发)、处理规则(从上下文信息中过滤和处理数据)、响应动作(如持久化到数据库、重新发布处理后的消息、转发消息到消息队列等)。

MQTT Broker 的使用

为了方便测试,我们使用 EMQ 提供的线上版 Broker,该 Broker 版本包含了 EMQ X Enterprise 的所有功能。

Broker 地址: broker.emqx.io

Broker 端口: 1883、8883(SSL)、8083(Websocket)、8084(WSS)

连接客户端我们使用 EMQ 提供的线上版 Websocket 工具:http://tools.emqx.io。

MQTT Broker 的连接

使用浏览器打开地址 http://tools.emqx.io,点击左下角的 New Connection 按钮,并在右侧框里填写链接信息,填写好必填字段后点击 Connect 按钮创建链接并连接至 Broker。

消息发布

连接成功后,点击右下角的 Write a message 弹出消息发布框,填写好 TopicPayload 后点击发送图标即可发布消息。

主题订阅

  • 订阅普通主题

    在中间的 Subscriptions 模块里,订阅 hello 主题。此时给 hello 主题发送消息的话,消息列表里会收到该消息(左侧为接收到的消息)。

  • 订阅通配符主题

    订阅通配符主题 testtopic/#,并给 testtopic/1 主题发送消息,此时消息列表里会接收到该消息。

MQTT 服务器介绍相关推荐

  1. MQTT3-常见的MQTT服务器介绍

    当今物联网应用越来越广泛,而MQTT作为一种轻量级的消息传输协议,逐渐成为物联网领域最受欢迎的协议之一.对于MQTT的应用,我们需要一个MQTT代理服务器来作为消息传递的中心枢纽.本文将介绍一些常见的 ...

  2. MOTT介绍(2)window安装MQTT服务器和client

    MQTT目录: MQTT简单介绍 window安装MQTT服务器和client java模拟MQTT的发布,订阅 window安装MQTT服务器,我这里下载了一个 apache-apollo-1.7. ...

  3. Windows服务器上Mqtt服务器EMQX的安装使用

    场景 Windows上Mqtt服务器搭建与使用客户端工具MqttBox进行测试: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...

  4. mqtt服务器性能H3,运用 MQTT-JMeter 插件测试 MQTT 服务器性能

    MQTT 简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是 IBM 开发的一个即时通讯协议,它比较适合于在低带宽.不可靠的网络的进行远程传感 ...

  5. 快速搭建MQTT服务器(MQTTnet和Apache Apollo)

    前言 MQTT协议是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分,http://mqtt.org/. MQTT is a machine-to-machine (M2M)/" ...

  6. MQTT服务器搭建和测试步骤及遇见的问题

    MQTT服务器搭建和测试步骤及遇见的问题 前言:MQTT服务器有好多种,查看:Servers/Brokers Apache-Apollo:一个代理服务器,在ActiveMQ基础上发展而来,可以支持ST ...

  7. c# 批量mqtt_c# mqtt服务器

    Mosquitto 搭建及配置 Eclipse Mosquitto是一个开源消息代理,实现了MQTT协议版本3.1和3.1.1.Mosquitto轻量,适用于低功耗单板计算机到完整服务器的所有设备.M ...

  8. 【STM32 x ESP8266】连接 MQTT 服务器(报文,附部分源码解析)

    MQTT 协议作为物联网非常重要的传输协议,如何使用它十分重要,如果有不理解的同学可以点击这里学习,这里只是简单介绍一下.同时这里附上MQTT 3.1.1协议中文版 pdf 的链接,对协议底层感兴趣的 ...

  9. DTU网关连接MQTT服务器、MQTT.fx工具测试

    4G DTU网关连接MQTT服务器+MQTT.fx工具调试 今天介绍DTU网关如何通过简单几步配置连接MQTT服务器,再使用MQTT.fx客户端进行串口测试. 一. 设备准备 1.硬件准备 DTU网关 ...

最新文章

  1. 「数据分析」之零基础入门数据挖掘
  2. 超强1000个jquery极品插件!(连载中。。。。最近更新20090710)
  3. 基于python的快速傅里叶变换FFT(二)
  4. Purchase Order Text
  5. Android中通过数组资源文件xml与适配器两种方式给ListView列表视图设置数据源
  6. HTTP 错误 500.21 - Internal Server Error 处理程序“PageHandlerFactory-ISAPI-4.0_32bit”在其模块...
  7. 使用.Net Core编写命令行工具(CLI)
  8. vs使用ado连接oracle,在VS环境下以ADO方式操作Oracle数据库
  9. ubuntu php pear_ubuntu下安装pear包(lynx和php-cli安装)
  10. 中countif函数_countif与countifs:单条件与多条件计数适用场景
  11. java局部变量简述
  12. pythonstdin_python 笔试输入:sys.stdin.readline和input
  13. 数据结构 6-0 图
  14. ListView使用BaseAdapter与ListView的优化
  15. 南京IT企业环境之最深心得体会
  16. python socket编程实例 带图形界面_python的socket编程实例
  17. mac多开屏幕_MAC外接屏幕一键开启HiDPI,支持Mojave
  18. 锂电池容量下降怎么办?锂电池容量下降修复方法
  19. 4种Word文档解除密码保护的方法
  20. linux中来宾用户权限,linux权限分配

热门文章

  1. c#进行url加密解密与jquery前端加密解密
  2. 要是我来做,早就做完了!(你是不是这么想?)
  3. 第三次科技革命---人工智能
  4. selenium执行js代码
  5. HTML5的popstate、pushState、replaceState记录(Vue-Router实现)
  6. linux怎么开放3306端口,Linux开启3306端口(开放mysql访问端口)
  7. 近期交通部及各省市共发布5大重要政策全力推进智慧交通!
  8. C#控件ListView用法
  9. 【NMI 2021】从生物学角度看进化计算(6个生物进化特征)
  10. 推荐5个很牛的开源项目