MQTT协议介绍与Broker列表
MQTT协议介绍
MQTT是什么?
MQTT 是基于 Publish/Subscribe(发布/订阅) 模式的物联网通信协议,凭借简单易实现、支持 QoS、报文小等特点。
MQTT中文文档:EMQ X 消息服务器简介 | EMQ Docs
wiki各种语言版本开发库:
https://github.com/mqtt/mqtt.github.io/wiki/libraries?spm=a2c4g.11186623.2.11.2d73174cN52z60
MQTT角色组成
1、服务端(Broker)
EMQX就是一个MQTT的Broker,emqx只是基于erlang语言开发的软件而已,类似的还有java、netty、nio框架。
此外还要其他的MQTT Broker如下:
MQTT Broker 有几个:
1. Eclipse Mosquitto: https://github.com/eclipse/mosquitto
使用 C 语言实现的 MQTT Broker。Eclipse 组织还还包含了大量的 MQTT 客户端项目:https://www.eclipse.org/paho/#
2. EMQX: https://github.com/emqx/emqx
使用 Erlang 语言开发的 MQTT Broker,支持许多其他 IoT 协议比如 CoAP、LwM2M 等
3. Mosca: https://github.com/mcollina/mosca
使用 Node.JS 开发的 MQTT Broker,简单易用。
4. VerneMQ: https://github.com/vernemq/vernemq
同样使用 Erlang 开发的 MQTT Broker
2、客户端(发布[生产者]/订阅[消费者])
EMQX 通过里面的websocket 可以实现消息的发布与订阅
当然我们常常会通过java代码来实现我们消息的生产者和消费者
在安装好EMQX代理服务器后,EMQX 不仅仅为我们提供了Mqtt broker,EMQX 的dashboard(一个EMQX的web界面)可以通过 websocket 这个功能实现消息的发布与订阅
MQTT Broker 比较与选型
列举几个热门开源的 MQTT Broker,其中部分项目提供商业支持,做简单选型对比。
| EMQ-X | HiveMQ | ActiveMQ | Mosquitto | |
|---|---|---|---|---|
| License | 开源+商用 | 开源+商用 | 开源 | 开源 |
| 公司 | 杭州映云科技 | dc-square ,德国 | Apache 项目维护者 | Eclipse 开源社区 |
| 开发语言 | Erlang | Java | Java | C |
| 连接数 | 开源十万级,商用百万级 | 开源25个,商用百万级 | 千万级 | |
| 系统性能 | 单机十万 | 单机百万 | 集群千万 | 支持集群 |
| 协议支持 | MQTT、CoAP、MQTT-SN、WebSocket、LwM2M | MQTT | MQTT、JMS、Openwire、Stomp、AMQP、WebSocket XMPP | MQTT、WebSocket |
| MQTT 5.0 | √ | √ | × | √ |
| 认证鉴权 | TLS/DTLS、ClientID/IP地址/用户密码认证、根据IP地址/ClientID/用户名访问控制LDAP/Redis/MySQL/MongoDB/PostgreSQL/HTTP API认证 | TLS/DTLS、X.509证书、JWT、OAuth2.0、应用协议(ID/用户名/密码)、配置文件形式的认证与 ACL 功能 | LDAP (JAAS)、Apache Shiro | × |
| 规则引擎 | 开源支持基础规则引擎,商用支持增强规则引擎 | × | × | × |
| 消息存储 | 开源不支持,商用支持Redis、MySQL、MongoDB、InfluxDB、OpenTSDB等 | 提供 Java SDK | JDBC、KahaDB、LevelDB | × |
| 扩展集成 | WebHook、Trigger、Plugin、LuaHook、PythonHook、JavaHook、大量REST API | Trigger、Plugin 、Java SDK | 少量队列管理 REST API | × |
| 管理监控 | Dashboard、Prometheus、Grafana | HiveMQ Control Center、Prometheus、Grafana、InfluxDB 监控 | Prometheus、Grafana | × |
更多 MQTT Broker 服务器
- EMQ X. Scalable and Reliable Real-time MQTT 5.0 Message Broker for IoT in 5G Era.
- Adafruit IO
- HiveMQ
- ActiveMQ
- ActiveMQ Artemis
- RabbitMQ
- Mosquitto
- flespi
- IBM MessageSight
- Mosca. More recently by the same author: Aedes
- MQTT Dashboard
- Eclipse IoT
- VerneMQ
- Solace
- CloudMQTT
- Wave
- vertx-mqtt-broker
- JoramMQ
- Moquette MQTT
- MQTTnet. Embedded MQTT broker, C#
- MyQttHub
- Jmqtt
MQTT协议介绍与Broker列表的更多相关文章
- MQTT协议介绍
http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.pdf MQTT 文档 http://mqtt.org/new/wp-c ...
- Tsung MQTT协议简介及MQTT xml文档配置介绍
MQTT协议简介及MQTT xml文档配置介绍 by:授客 QQ:1033553122 1. MQTT协议介绍 MQTT(Message Queuing Telemetry Transport,消息队 ...
- 基于rabbitmq之MQTT协议的智能家居
智能家居项目 智能可燃气体报警器 产品是一款可燃气体报警器,如果家中燃气泄露浓度到达一定阈值,报警器检测到并上传气体浓度值给后台,后台以电话.短信.微信等方式,提醒用户家中可能有气体泄漏. 用户还可能 ...
- 基于MQTT协议进行应用开发
官方协议有句如下的话来形容MQTT的设计思想: "It is designed for connections with remote locations where a "sma ...
- 什么是MQTT协议?
MQTT协议介绍 MQTT协议是什么? MQTT(Message Queuing Telemetry Transport Protocol)的全称是消息队列遥感传输协议的缩写,是一种基于轻量级代理的发 ...
- MQTT协议QoS服务质量 (Quality of Service 0, 1 & 2)概念学习
什么是 QoS ? QoS (Quality of Service) 是发送者和接收者之间,对于消息传递的可靠程度的协商. QoS 的设计是 MQTT 协议里的重点.作为专为物联网场景设计的协议,MQ ...
- MQTT协议的简单介绍和服务器的安装
最近公司做的项目中有用到消息推送,经过多方面的筛选之后确定了使用MQTT协议,相对于XMPP,MQTT更加轻量级,并且占用用户很少的带宽. MQTT是IBM推出的一种针对移动终端设备的基于TCP/IP ...
- 采用MQTT协议实现android消息推送(2)MQTT服务端与客户端软件对比、android客户端示列表
1.服务端软件对比 https://github.com/mqtt/mqtt.github.io/wiki/servers 名称(点名进官网) 特性 简介 收费 支持的客户端语言 IBM MQ 完整的 ...
- 物联网MQTT协议分析和开源Mosquitto部署验证
在<物联网核心协议—消息推送技术演进>一文中已向读者介绍了多种消息推送技术的情况,包括HTTP单向通信.Ajax轮询.Websocket.MQTT.CoAP等,其中MQTT协议为IBM制定 ...
- Android实现推送方式解决方案 - 长连接+心跳机制(MQTT协议)
本文介绍在Android中实现推送方式的基础知识及相关解决方案.推送功能在手机开发中应用的场景是越来起来了,不说别的,就我们手机上的新闻客户端就时不j时的推送过来新的消息,很方便的阅读最新的新闻信息. ...
随机推荐
- DNS(3) -- dns常用命令-rndc-dig-host-nslookup
目录 1 bind自带客户端命令 1.1 rndc命令 1.2 检查配置文件语法 2 客户端测试命令 2.1 dig命令 2.2 host命令 2.3 nslookup命令 1 bind自带客户端命令 ...
- WEB服务与NGINX(10)-NGINX访问控制功能
目录 1.NGINX访问控制功能 1.1 基于ip地址的访问控制 1.2 基于用户名密码的认证 1.NGINX访问控制功能 nginx的访问控制有两种方式: 基于ip进行限制,由ngx_http_ac ...
- 微信小程序使用微信云托管添加自定义域名并转发到pexels.com
背景:我要在小程序上显示pexels.com上的图片,然后我得先把pexels.com的域名添加到小程序的request合法域名中,但是pexels.com是国外的,在国内没有备案所以添加不了.解决方 ...
- SpringBoot-RSA加密
前言 最近由于工作业务的需要,需要对指定的字段信息进行非对称加解密:由于需要加密的内容过于庞大:自己执行程序会出现:Data must not be longer than 117 bytes 的异常 ...
- TCP协议分析工具TcpEngine V1.2.0使用教程
概述 目前主流的网络数据分析工具主要有两类,一类是http协议分析工具,如fiddler,这类工具擅长对字符串类型协议分析:另一类是原始网络数据包的监听分析,如Wireshark,这类工具擅长分析网络 ...
- 13年过去了,Spring官方竟然真的支持Bean的异步初始化了!
你好呀,我是歪歪. 两年前我曾经发布过这样的一篇文章<我是真没想到,这个面试题居然从11年前就开始讨论了,而官方今年才表态.> 文章主要就是由这个面试题引起: Spring 在启动期间会做 ...
- linux分区规划
一般来说,对系统进行分区,需要提前规划好: 系统分区:如果资源允许的话,建议300G(该分区只存放操作系统和一些配置文件等): /boot分区:是引导分区(该分区损坏,系统就启动不了了),在b ...
- 【C#】使用WebHttpRequest调用Restful带token接口500 返回401 未授权错误
测试对方的接口,发现单个调用对方接口是可以的,但是多个连续的调用对方接口时,会出现第一条调用一般是200,随后的调用就会报500,401未授权的错误,除了第一条后面的请求数据几乎都不得行. 我于是用f ...
- 记录一下Android usb相关的知识学习
在SecondStageMain中会先调用PropertyInit做属性初始化,该方法会调用PropertyLoadBootDefaults加载持久化的属性主要加载位置: /system/build. ...
- 关于《Java并发编程之线程池十八问》的补充内容
一.写在开头 在上一篇文章我们写<Java并发编程之线程池十八问>的时候,鉴于当时的篇幅已经过长,很多内容就没有扩展了,在这篇文章里对一些关键知识点进行对比补充. 二.Runnable v ...