大家好,欢迎来到IT知识分享网。
目录
概述
本文详细介绍如何EMQX配置一个MQTT服务器,并使用MQTT.fx工具,分别实现了MQTT message的订阅和发送功能。还在Ubuntu上实现了一个Client,它可以发布信息,MQTT.fx工具用来订阅该信息,用以测试MQTT服务器的数据发布和订阅功能。
1 配置EMQX做MQTT服务器
1.1 登录EMQX
在Ubuntu上安装好了EMQX之后,然后在第三方电脑上登录该服务器,并做相应的配置。第一步要做的事情是登录该服务器,怎么登录系统?在浏览器上输入网址,会看到如下页面:
这时候需要输入用户名和密码:
类型 | 内容 | 注释 |
---|---|---|
username | admin | 用户名 |
password | public | 密码 |
输入用户名和密码后,点击登录按钮,会进入如下页面,说明已经成功登录到服务器。后面需要做一些相应的配置,使其成为MQTT服务器。
1.2 配置EMQX
1.2.1 配置客户端认证
这里主要配置访问MQTT服务器的方式,数据库信息等类型,配置步骤如下:
step -1:选择Password-Based方式,其目的: 使用客户端用户名、Client ID 与密码进行认证
step-2: 选择内置数据库,这样不用再安装第三方数据了
step – 3: 配置参数,选择默认配置即可
点击创建按钮后,跳到如下页面,数据库创建成功:
1.2.2 创建用户
在如下选项卡中选择配置用户
添加用户信息
笔者使用如上方法创建连个用户:
2 测试MQTT服务器
2.1 配置MQTT.fx工具
笔者已经在EMQX中配置了两个user,现在使用MQTT.fx来连接该服务器,以验证其是否可以正常的功能。在连接EMQX之前,需要在MQTT.fx中创建一个终端。
step – 1: 配置EMQX的IP地址
step-2: 输入用户认证
以上两步完成后,可以尝试连接MQTT服务器
2.2 连接MQTT服务器
点击connect后,看见如下图标颜色,说明MQTT.fx连接服务器成功
在服务器端可以看见如下信息。这时可以在MQTT.fx上发布和订阅信息:
3 使用MQTT.fx发布和订阅信息
3.1 在MQTT.fx上发布信息
定义一个topic : switch
{ "DI1": true, "DI2": false, "DI3": false, "DI4": true, "DI5": true, "DI6": false }
3. 2 在MQTT.fx上订阅信息
选择subscribe选项卡,输入订阅的topic,然后在publish选项卡中发布信息,subscribe中可以看见如下信息,说明订阅数据成功:
4 Ubuntu上实现MQTT Client
下面实现一个功能: 在Ubuntu上实现MQTT Client, 然后发布信息至服务器。MQTT.fx订阅该信息,并查看Ubuntu上MQTT Client发布的信息与MQTT.fx接收到的信息是否一致
4.1 Ubuntu上编写MQTT Client
本Client选择连接的用户信息如下:
代码实现如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include "MQTTClient.h" #define ADDRESS "tcp://192.168.1.11" #define CLIENTID "MQTT_USR2" #define TOPIC "mytest" #define PAYLOAD "" #define USERNAME "mqtt_user2" #define PASSWORD "" #define QOS 0 #define TIMEOUT 10000L int main(int argc, char* argv[]) { MQTTClient client; MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer; MQTTClient_message pubmsg = MQTTClient_message_initializer; MQTTClient_deliveryToken token; int rc; if ((rc = MQTTClient_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL)) != MQTTCLIENT_SUCCESS) { printf("Failed to create client, return code %d\n", rc); exit(EXIT_FAILURE); } conn_opts.keepAliveInterval = 20; conn_opts.cleansession = 1; conn_opts.username = USERNAME; //用户名 conn_opts.password = PASSWORD; //密码 if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS) { printf("Failed to connect, return code %d\n", rc); exit(EXIT_FAILURE); } while(1){ pubmsg.payload = PAYLOAD; pubmsg.payloadlen = (int)strlen(PAYLOAD); pubmsg.qos = QOS; pubmsg.retained = 0; if ((rc = MQTTClient_publishMessage(client, TOPIC, &pubmsg, &token)) != MQTTCLIENT_SUCCESS) { printf("Failed to publish message, return code %d\n", rc); exit(EXIT_FAILURE); } printf("Waiting for up to %d seconds for publication of %s\n" "on topic %s for client with ClientID: %s\n", (int)(TIMEOUT/1000), PAYLOAD, TOPIC, CLIENTID); rc = MQTTClient_waitForCompletion(client, token, TIMEOUT); printf("Message with delivery token %d delivered\n", token); sleep(5); } MQTTClient_destroy(&client); return rc; }
4.2 编译和测试
在ubuntu上编译代码,使用命令:
gcc MQTTClient_publish.c -lpaho-mqtt3c
编译成功后,生成.out 文件
运行该文件,可以看见,该客户端已经能正常的发送数据:
在EMQX上可以看见,MQTT_USR2已经在线
5 MQTT.fx订阅MQTT_USR2 Topic
5.1 MQTT.fx订阅Topic
现在实现一个功能MQTT.fx订阅MQTT_USR2 Topic,根据MQTT_USR2的代码可知,其发布数据的topic 为:
在MQTT.fx上订阅该Topic: mytest
5.2 EMQX上查看数据流
登录EMQX,在客户端栏上选择当前用户,可以看见当前Client数据流的详细情况
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/127988.html