mqtt 服务器搭建需要用到java吗

mqtt 服务器搭建需要用到java吗,第1张

最近公司做的项目中有用到消息推送,经过多方面的筛选之后确定了使用MQTT协议,相对于XMPP,MQTT更加轻量级,并且占用用户很少的带宽。

MQTT是IBM推出的一种针对移动终端设备的基于TCP/IP的发布/预订协议,可以连接大量的远程传感器和控制设备。

MQTT的官网见:http://mqtt.org/。其中http://mqtt.org/software里面提供了官方推荐的各种服务器客户端使用的各种语言版本的API。

下面以服务器Apollo 1.6为例,之前尝试过使用ActiveMQ,效果很不理想,只能实现服务器和客户端一对一的通信,从官网上了解到Apollo属于activemq的一个子工程。先不管这些了,言归正传,以下在windows环境下。

1、在这里下载Apollo服务器,下载后解压,然后运行apache-apollo-1.6\bin\apollo.cmd,输入create mybroker(名字任意取,这里是根据官网介绍的来取的)创建服务器实例,服务器实例包含了所有的配置,运行时数据等,并且和一个服务器进程关联。

2、create mybroker之后会在bin目录下生成mybroker文件夹,里面包含有很多信息,其中etc\apollo.xml文件下是配置服务器信息的文件,etc\users.properties文件包含连接MQTT服务器时用到的用户名和密码,后面会介绍,可以修改原始的admin=password,可以接着换行添加新的用户名密码。

3、打开cmd,运行…apache-apollo-1.6\bin\mybroker\bin\apollo-broker.cmd run 开启服务器,可以在浏览器中输入http://127.0.0.1:61680/查看是否安装成功,该界面展示了topic,连接数等很多信息。

经过上面的简单步骤,服务器基本上就已经完成,下一篇将介绍Android客户端的编写和注意事项。

客户端使用的API,开始我使用的是mqtt-client,使用过后发现问题百出,不能很好的满足要求,后来使用了官方推荐的Eclipse Paho,下面开始客户端代码的编写,为了方便测试这里有android和j2se两个工程:

1、新建android工程MQTTClient

2、MainActivity代码如下:

      用户在使用CAT1模组MQTT协议对接自己的服务器,有时会遇到设备无法连接服务器问题(比如提示+ECMTCON:0,0,5连接服务器被拒绝,认证失败)。此时可以通过 标准的MQTT服务器 进行对比,因为用户自己的服务器一般加入校验信息,导致模组&MQTT服务器无法连接。

       Eclipse Mosquitto是一个开源消息代理,实现了MQTT协议版本3.1和3.1.1,这里使用该服务器进行测试。针对该服务器更详细的介绍也可以参考 https://www.jianshu.com/p/b6a75bfbe82f 。

       MQTT有个重要的参数QOS,因下面使用较多,这里列出便于后续查看:

AT+ECMTOPEN=<tcpconnectID>,“<host_name>”,<port>

<tcpconnectID>整型。 MQTT Socket 标识符。范围: 0~4

<host_name>  IP 地址或域名

<port>整型。服务器端口

示例:AT+ECMTOPEN=0, "test.mosquitto.org",1883   //建立 tcp

返回值:+ECMTOPEN:<tcpconnectID>,<result> 

<tcpconnectID>Integer type,MQTT socket identifier. The value is 0

<result>1 Failed to open network,0 Opened network successfully

AT+ECMTCONN=<tcpconnectID>,“<clientID>”[,“<username>”[,“<password>”]]

<tcpconnectID> MQTT socket identifier. The value is 0

“<clientID>” 用户不指定标准服务器会自行创建

“<username>”,“<password>” 标准MQTT服务器不使用

示例:AT+ECMTCONN=0   //在 mosquitto 平台上注册设备

返回值:+ECMTCONN:<tcpconnectID>,<result>[,<ret_code>]

AT+ECMTSUB=<tcpconnectID>,<msgID>,“<topic>”,<qos>

<tcpconnectID> MQTT socket identifier. The value is 0

<msgID>任意填写,Message identifier of packet. The range is 1-65535

<topic>String type,Topic that the client wants to subscribe to or unsubscribe from.

<qos> Message QoS, can be 0,1 or 2

示例:AT+ECMTSUB=0,1,”test”,2 //订阅 topic

返回值:+ECMTSUB:<tcpconnectID>,<msgID>,<result>[,<value>]

额外指令:AT+ECMTUNS=0,4, “test” //取消订阅 topic

AT+ECMTPUB=<tcpconnectID>,<msgID>,<qos>,<retain>,“<topic>”,“<payload>"

<tcpconnectID> MQTT socket identifier. The value is 0

<msgID> Message identifier of packet.

<qos> Message QoS, can be 0,1 or 2

<retain> 0 Server should not retain the message   1 Server should retain the message

<topic>String type

<payload>String type

示例:AT+ECMTPUB=0,0,0,0,"test","hello" //发送数据给 mosquitto 平台

+ECMTPUB:<tcpconnectID>,<msgID>,<result>[,<value>]

额外指令:AT+ECMTDISC=0  //删除 mqtt client 和 mqtt 连接


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/495840.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-06-15
下一篇2023-06-15

发表评论

登录后才能评论

评论列表(0条)

    保存