一文学会MQTT协议和mosquitto
- 一.、MQTT的基本概念
- 二、mosquitto
- mosquitto基本概念
- 常用API
- 三、MQTT测试
- EMQX
一.、MQTT的基本概念
MQTT是一种基于发布/订阅模式的协议,其中发布者发布消息,订阅者订阅感兴趣的主题(topic),并接收发布者发布的消息。
-
客户端(Client)
MQTT协议中的客户端是指与MQTT服务器建立连接并进行消息传输的设备或程序。客户端可以是发布者(Publisher)、订阅者(Subscriber)或同时兼具发布者和订阅者的设备或程序。 -
服务器(Broker)
MQTT协议中的服务器是指接受客户端连接并进行消息转发的中间件。服务器可以接受来自不同客户端的消息,并将其分发给对应的订阅者或存储在消息队列中等待订阅者连接后接收。 -
消息主题(Topic)
MQTT协议中的消息主题是用于标识消息类型或消息内容的字符串,消息发布者可以将消息发布到一个或多个主题上,订阅者可以订阅一个或多个主题,接收相关的消息。 -
QoS(Quality of Service)
MQTT协议中的QoS是指消息传输的服务质量等级,它有三个级别:
QoS0:最多发送一次,不保证消息到达。
QoS1:至少发送一次,确保消息到达,但可能会重复。
QoS2:只发送一次,确保消息到达且不重复。 -
连接(Connection)
MQTT协议中的连接是指客户端与服务器之间建立的TCP连接,通过连接可以进行消息传输和状态交互。 -
会话(Session)
MQTT协议中的会话是指客户端与服务器之间的通信状态,包括连接状态、订阅状态、QoS等级等。会话可以是持久的,也可以是短暂的。 -
消息保留(Retained Message)
MQTT协议中的消息保留是指发布者发布的消息可以保留在服务器上,直到订阅者连接后才发送给订阅者。保留的消息可以覆盖旧的消息,也可以保留多个版本。
二、mosquitto
mosquitto基本概念
一款实现了消息推送协议 MQTT的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器,手机、嵌入式计算机、微型控制器等移动设备。
常用API
①struct mosquitto *mosquitto_new(const char *id, bool clean_session, void *userdata);
该函数用于创建一个新的Mosquitto实例,并返回指向该实例的指针。可以使用该实例来连接到MQTT代理服务器、订阅主题、发布消息等。
②int mosquitto_connect(struct mosquitto *mosq, const char *host, int port, int keepalive);
该函数用于连接到MQTT代理服务器。需要传递MQTT代理服务器的地址和端口号,以及可选的用户名和密码。还可以设置MQTT选项,例如保持连接的间隔、遗嘱消息等。
③int mosquitto_disconnect(struct mosquitto *mosq);
该函数用于断开与MQTT代理服务器的连接。
④int mosquitto_publish(struct mosquitto *mosq, int *mid, const char *topic, int payloadlen, const void *payload, int qos, bool retain);
该函数用于向MQTT代理服务器发布一条消息。需要传递Mosquitto实例的指针、消息的主题、消息的内容、消息的长度以及可选的QoS等级、保留标志。
⑤int mosquitto_subscribe(struct mosquitto *mosq, int *mid, const char *sub, int qos);
该函数用于订阅一个或多个主题。需要传递Mosquitto实例的指针、主题字符串、可选的QoS等级。
⑥int mosquitto_unsubscribe(struct mosquitto *mosq, int *mid, const char *sub);
该函数用于取消订阅一个或多个主题。需要传递Mosquitto实例的指针和主题。
⑦void mosquitto_connect_callback_set(struct mosquitto * mosq, void (*on_connect)(struct mosquitto *mosq, void *obj, int rc) )函数用于MQTT协议中,在客户端成功连接到MQTT代理时设置回调函数。
⑧void mosquitto_message_callback_set( struct mosquitto * mosq, void (*on_message)(struct mosquitto *, void *, const struct mosquitto_message *) )
函数是 MQTT 协议中用于设置消息接收回调函数的函数。当客户端接收到订阅主题的消息时,回调函数将被调用,可以用于处理收到的消息。
⑨mosquitto_publish_callback_set() 函数是 MQTT 协议中用于设置消息发布回调函数的函数。当客户端成功地将消息发布到代理时,回调函数将被调用,可以用于处理发布的确认消息。
⑩mosquitto_disconnect_callback_set() 函数是 MQTT 协议中用于设置断开连接回调函数的函数。当客户端与代理断开连接时,回调函数将被调用,可以用于处理断开连接的情况。
三、MQTT测试
EMQX
1、需要进入到解压缩文件夹下的bin里
打开cmd窗口后输入 :emqx start回车
emqx-5.0.6-windows-amd64\bin>emqx start
关闭服务器输入 :emqx stop
用浏览器打开http://127.0.0.1:18083/即可看到后台管理页面,默认用户名/密码为admin/public
2、MQTTX连接EMQX
新建连接,填写相关信息
3、开发板连接EMQX
修改mqtt config信息,
重启配置
这个配置文件是针对mosquitto的一个bridge(桥接器)进行配置的。bridge用于连接两个不同的MQTT Broker,使得两个Broker之间可以进行消息的交换。
- user root:表示启动mosquitto的用户是root。
- connection ODU:表示该bridge的名称为ODU。
- address 169.254.252.100:1883:表示要连接的目标MQTT Broker的地址为169.254.252.100:1883。
- restart_timeout 5:表示重启bridge的超时时间为5秒。
- topic:表示该bridge所要处理的消息的主题。
- out:表示该bridge要发布的消息,即允许哪些主题可以发布消息到目标MQTT Broker。
- in:表示该bridge要订阅的消息,即允许哪些主题的消息可以被订阅到本地MQTT Broker。
- listener:表示要监听的端口和IP地址,这里是监听1883端口,IP地址为169.254.251.1。
- allow_anonymous true:表示允许匿名用户连接到该MQTT Broker。
- log_dest file /var/log/mosquitto.log:表示将日志输出到文件/var/log/mosquitto.log中。