MQTT简介Mosquitto桥接及集群环境搭建 - CSDN博客

标签: | 发表时间:2018-09-08 18:12 | 作者:
出处:https://blog.csdn.net

MQTT v5.0草案中文翻译: github.com/hui6075/mqtt_v5

原创文章如转载,请注明出处(http://blog.csdn.net/hui6075/)。

目录:
MQTT协议简介
Mosquitto桥接模式
Mosquitto集群模式

MQTT协议简介

MQTT是IBM为物联网等环境定义的一套应用层即时通信协议,通过消息中间件,提供订阅/发布方式通过“主题”为不同设备之间的通信提供解耦。

类似的协议还有XMPP、COAP等,但MQTT协议由于信令种类少、控制信息少、信息承载率高,因而对设备的处理能力和网络环境要求比较低。试想,让一个200MHz、64K内存的嵌入式模块去解析HTTP/JASON/XML字符串,可能还没等到数据包解析完,下一条数据就到了,哈哈。当然,也有很多人拿MQTT作为安卓推送协议,也是非常能提高用户体验的,比如MQTT协议里的保留消息,可以让手机收到开机之前系统或其他设备就已经发布的一些消息。

通常称消息中间件为broker,支持MQTT的broker有很多,开源的比如基于C语言的 Mosquitto,基于Erlang的 EMQRabbitMQ+插件,基于Java的 ActiveMQ,甚至基于Node.js的 Mosca。我自己尝试过Mosquitto和RabbitMQ,Mosquitto完全实现了MQTT协议的所有内容,而RabbitMQ对MQTT的支持并不完善,比如不支持QoS=2的消息以及保留消息。另外中国人自己开发的 EMQ也是非常棒的MQTT broker,支持集群,消息持久化。

Mosquitto桥接模式

我的生产环境使用的broker是 Mosquitto,老实说Mosquitto最初设计可能也是为了运行在嵌入式平台,使用的IO模型、定时器都比较简陋,通常需要优化才能支持大流量高并发的业务场景,而且流量太大的情况下Mosquitto也支持通过bridge(桥接)的方式连接多台broker,通常选取一台broker作为bridge节点,在其配置文件(mosquitto.conf)中添加桥接选项:

connection bridge1
address 192.168.1.102:1883
topic # both 0

connection bridge2
address 192.168.1.103:1883
topic /sensor/temperature in 1

其中bridge1/bridge2是为其他broker起的名字,地址是其他broker的IP和端口,topic指定了允许本地broker和对方broker之间传递的消息主题,配成#则所有主题消息都将被传递。both/in/out是指允许的消息方向,in是指此主题消息的转发方向只能是从对方broker到本地broker,不能是从本地broker到对方broker,这样如果有客户端连接到本地broker订阅/sensor/temperature这个主题的话,发布到对方broker上的/sensor/temperature主题消息本地客户端也可以收到,反之则收不到。

通过以上介绍,可以知道bridge方式下主题配置非常不灵活,特别是有些场景下消息发布客户端和订阅客户端之间通过MAC地址、UUID等作为主题名进行通信,根本无法手工为每对发布/订阅设备进行配置。

Mosquitto集群模式

Mosquitto也有基于二次开发的 集群实现

集群方式则是动态订阅,每个broker既是发布者也是订阅者,对于连到本地broker的客户端订阅的主题,本地broker会向集群中其他broker进行订阅,因此无需事先动态配置主题过滤器。此外,集群中所有broker都处于同等地位,因此不存在单点失效的问题。配置起来也非常简单,在每个机器的mosquitto.conf中:

node_name node1
node_address 192.168.1.101:1883

node_name node2
node_address192.168.1.102:1883

node_name node3
node_address 192.168.1.103:1883

编译mosquitto时把config.mk中的WITH_BRIDGE注释掉,把WITH_CLUSTER:=yes取消注释,然后make && make install安装mosquitto,并在所有机器启动mosquitto即可。

功能测试:

在主机1上订阅主题"clustermsg",在主机2上发布主题为"clustermsg"的消息,主机1上可以收到此消息。


benchmark:

在1台broker、2台broker、3台broker、4台broker、9台broker的情况下分别测试集群的整体吞吐率,从1台broker到3台broker时整体吞吐率逐渐增长,增长系数大概在0.8左右,broker超过3台时整体吞吐率由于压测工具的瓶颈而停止增长。


测试参数说明:消息长度固定1000字节,n10k指每个客户端发送10k个消息,c100指一共100个客户端,QoS选取为2。

集群的原理和更详细的性能测试报告,可见 mosquitto cluster@github项目的readme.md。

相关 [mqtt 简介 mosquitto] 推荐:

MQTT简介Mosquitto桥接及集群环境搭建 - CSDN博客

- -
MQTT v5.0草案中文翻译:. 原创文章如转载,请注明出处(http://blog.csdn.net/hui6075/). MQTT是IBM为物联网等环境定义的一套应用层即时通信协议,通过消息中间件,提供订阅/发布方式通过“主题”为不同设备之间的通信提供解耦. 类似的协议还有XMPP、COAP等,但MQTT协议由于信令种类少、控制信息少、信息承载率高,因而对设备的处理能力和网络环境要求比较低.

MQTT(使用mosquitto做broker)做Android推送部分总结 - Scholer的个人页面 - 开源中国

- -
我觉得这句话用在程序员的工作中就是:在网络中找一万篇资料,在实践中做一万种尝试.
**2014-09-17:** **在本文中,由于作者事先不了解,设计不合理,使每个设备采用prefix+CLIENT_ID的方式作为topic,导致需要给每个设备的topic单独推送,才产生了一些问题,特别是推送的时间上的问题,是PHP循环往每个topic写入消息的时间.

GitHub - GruppoFilippetti/vertx-mqtt-broker: Vert.x based MQTT Broker

- -

MQTT协议 - 安全问题

- - ITeye博客
        物联网的核心是连接万物,通过交换并分析数据使得生活更舒适与便捷. 不过,敏感数据泄露或者设备被非法控制可不是闹着玩的. 比如前段时间国内某著名家电企业的智能洗衣机,使用了某著名电商基于XMPP协议的物联网平台,不费吹灰之力便被黑客攻破并远程遥控,给智能家居的发展带来了一些阴影. 究其本质,并不是物联网技术本身有缺陷,而是在物联网系统的设计中最基本的安全设计被工程师轻视了,才导致整个系统的崩塌.

Mosquitto搭建Android推送服务(三)Mosquitto集群搭建 - 梧桐雨的笑容 - 博客园

- -
一、Mosquitto的分布式集群部署. 如果需要做并发量很大的时候就需要考虑做集群处理,但是我在查找资料的时候发现并不多,所以整理了一下,搭建简单的Mosquitto集群模式. 首先集群需要2台以上的Mosquitto服务器. 先了解下Mosquitto集群模式的逻辑图,如下:. 可以看出,无论在那台服务器中订阅了信息,无论在那台服务器上发布信息,订阅者都可以收到发布的信息.

activeMQ 推送之mqtt客户端

- - ITeye博客
使用activeMQ进行android推送. activeMQ下载地址:http://activemq.apache.org/download.html. 下载后是一个压缩包:apache-activemq-5.9.0-bin.zip. 解压缩,进入apache-activemq-5.9.0-bin\apache-activemq-5.9.0\bin,双击activemq.bat,即可启动activeMQ服务.

Android推送方案分析(MQTT/XMPP/GCM)

- - 移动开发 - ITeye博客
本文主旨在于,对目前Android平台上最主流的几种消息推送方案进行分析和对比,比较客观地反映出这些推送方案的优缺点,帮助大家选择最合适的实施方案. 方案1、使用GCM服务(Google Cloud Messaging). 简介:Google推出的云消息服务,即第二代的C2DM. 优点:Google提供的服务、原生、简单,无需实现和部署服务端.

建立一个高可用的MQTT物联网集群How to Build an High Availability MQTT Cluster for the Internet of Things

- -
建立一个高可用的MQTT物联网集群. We were searching for a secure (auth based), customisable (communicating with our REST API) and easy to use solution (we knew Node.js).

MQTT协议笔记之mqtt.io项目TCP协议支持

- - BlogJava-首页技术区
MQTT定义了物联网传输协议,其标准倾向于原始TCP实现. 构建于TCP的上层协议堆栈,诸如HTTP等,在空间上多了一些处理路径,稍微耗费了CPU和内存,虽看似微乎其微,但对很多处理能力不足的嵌入式设备而言,选择原始的TCP却是最好的选择. 但单纯TCP不是所有物件联网的最佳选择,提供构建与TCP基础之上的传统的HTTP通信支持,尤其是浏览器、性能富裕的桌面涉及领域,还是企业最 可信赖、最可控的传输方式之一.

使用ActiveMQ+MQTT实现Android点对点消息通知-转载

- - 开源软件 - ITeye博客
ActiveMQ使用MQTT协议,加上android上的paho包,即可简单实现消息通知功能,但是mqtt协议只支持topic,而且不能用selector,使得点对点的消息投递变成问题. 1、每个clientId,建一个topic...这个办法对解决消息点对点投递非常有效,但是有两个大问题:. 随着用户数增多,topic数量增多,对管理性要求增大,对内存的管理也有问题.