搭建一个完整的MQTT协议环境,除了需要MQTT Client外,我们还需要一个MQTT Broker。如前文所述,Broker负责接收Publisher的消息,并将消息发送给相应的Subscriber,它是整个MQTT协议订阅/发布的核心。
在实际应用中,一个MQTT Broker还应该提供如下功能:
·可以对Client的接入进行授权,并对Client进行权限控制;
·可以横向扩展,比如集群,满足海量的Client接入;
·有较好的扩展性,可以比较方便地接入现有业务系统;
·易于监控,满足高可用性。
下面列举了几个比较常用的MQTT Broker。
Mosquitto是用C语言编写的一款开源MQTT Broker,单机配置和运行Mosquitto比较简单,官方并没有集群的解决方案。如果要扩展Mosquitto的功能,比如自定义的验证方式,实现过程比较复杂,对接现有的业务系统等也较为复杂,需要对Mosquitto代码比较熟悉。搭建一个测试Broker或者单机验证功能环境,用Mosquitto还是比较合适的,如果想在生产系统中使用,则需要自行解决集群和扩展的问题。
EMQ X是由中国人开发并提供商业支持的MQTT Broker。EMQ X同时提供开源社区版和付费企业版。EMQ X是用Erlang语言编写的,官方提供集群解决方案,并可以通过编写插件的方式对Broker的功能进行扩展。EMQ X的开发者社区比较活跃,青云提供的物联网套件就是基于EMQ X的。我在生产系统中使用EMQ X已经有几年了,EMQ X的性能在我看来是很不错的,唯一的缺点就是Erlang这门语言比较小众,而且学习曲线较陡,编写插件的时候可能需要重新学习一门语言。第5章会对EMQ X进行详细介绍。
HiveMQ是用Java编写的MQTT Broker,支持集群,同时也可以通过插件的方式对功能进行扩展。Java语言的受众较广,功能扩展相对简单。不过HiveMQ是闭源的,只有付费企业版。
VerneMQ是开源的,是用Erlang编写的MQTT Broker,且由一家位于瑞士的公司提供商业服务。VerneMQ同样支持集群,并可使用插件的方式对功能进行扩展。
除了上面提到的几个常用的MQTT Broker,你还可以在 https://github.com/mqtt/mqtt.github.io/wiki/servers 找到更多的MQTT Broker。
除了自建Broker,我们还可以使用前面提到的阿里云、腾讯云、青云之类的云服务商提供的物联网云平台的MQTT协议服务。
如果只是抱着学习或者测试的目的,我们还可以使用一些公共的MQTT Broker,这里我们先使用一个公共的MQTT Broker(mqtt.eclipse.org)讲解和学习MQTT协议,在后面的章节里,再学习如何搭建一个MQTT Broker。