使用MQTT.fx和自定义Client(Ubuntu上实现)测试MQTT服务器(EMQX )

news/2024/7/24 6:27:18 标签: linux, 运维, 服务器

目录

概述

1 配置EMQX做MQTT服务器

1.1 登录EMQX

1.2 配置EMQX

1.2.1 配置客户端认证

1.2.2 创建用户

2 测试MQTT服务器

2.1 配置MQTT.fx工具

2.2 连接MQTT服务器

3 使用MQTT.fx发布和订阅信息

3.1 在MQTT.fx上发布信息

3. 2 在MQTT.fx上订阅信息

4 Ubuntu上实现MQTT Client

4.1 Ubuntu上编写MQTT Client

4.2 编译和测试

5 MQTT.fx订阅MQTT_USR2 Topic

5.1 MQTT.fx订阅Topic

5.2 EMQX上查看数据流


概述

本文详细介绍如何EMQX配置一个MQTT服务器,并使用MQTT.fx工具,分别实现了MQTT message的订阅和发送功能。还在Ubuntu上实现了一个Client,它可以发布信息,MQTT.fx工具用来订阅该信息,用以测试MQTT服务器的数据发布和订阅功能。

1 配置EMQX做MQTT服务器

1.1 登录EMQX

在Ubuntu上安装好了EMQX之后,然后在第三方电脑上登录该服务器,并做相应的配置。第一步要做的事情是登录该服务器,怎么登录系统?在浏览器上输入网址,会看到如下页面:

这时候需要输入用户名和密码:

类型内容注释
usernameadmin用户名
passwordpublic密码

输入用户名和密码后,点击登录按钮,会进入如下页面,说明已经成功登录到服务器。后面需要做一些相应的配置,使其成为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     "123456"
​
#define USERNAME    "mqtt_user2"
#define PASSWORD    "123456"
​
#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数据流的详细情况


http://www.niftyadmin.cn/n/5431254.html

相关文章

前端项目边界处理

在前端开发中&#xff0c;边界处理是非常重要的一个部分。边界处理涉及到错误处理、输入验证、 边界情况处理等。一个良好的边界处理可以提高用户体验&#xff0c;保证系统的稳定性和安全性。 一、错误处理 错误处理是可以帮助我们更好地处理意外情况&#xff0c;避免应用程序…

[AIGC] Spring Boot的切面编程可以用来解决哪些常见的问题?

Spring Boot切面编程的应用场景 Spring Boot的切面编程&#xff08;AOP&#xff09;有着诸多的应用场景。借助AOP&#xff0c;我们可以对多种类型和对象进行跨切面管理&#xff0c;例如事务管理。以下是一些常见的问题&#xff0c;我们可以使用Spring Boot的AOP来解决。 1. 日…

在 Mac 上通过“启动转换助理”安装 Windows 10

在 Mac 上通过“启动转换助理”安装 Windows 10 你可以通过“启动转换”在 Mac 上安装 Microsoft Windows 10&#xff0c;然后在重新启动 Mac 时在 macOS 和 Windows 之间进行切换。 在 Mac 上安装 Windows 10 需要满足的条件 只有在搭载 Intel 处理器的 Mac 上才能使用“启…

(二)丶RabbitMQ的六大核心

一丶什么是MQ Message Queue(消息队列&#xff09;简称MQ&#xff0c;是一种应用程序对应用程序的消息通信机制。在MQ中&#xff0c;消息以队列形式存储&#xff0c;以便于异步传输&#xff0c;在MQ中&#xff0c;发布者&#xff08;生产者&#xff09;将消息放入队列&#xff…

Pretrain-finetune、Prompting、Instruct-tuning训练方法的区别

来自&#xff1a;【多模态】28、LLaVA 第一版 | Visual Instruction Tuning 多模态模型的指令微调_多模态指令跟随数据-CSDN博客 几种模型训练方法的区别&#xff1a; 1、Pretrain-finetune&#xff1a;先在大量数据集上做预训练&#xff0c;然后针对某个子任务做 finetune 2…

在 Ubuntu 14.04 上使用 Capistrano、Nginx 和 Puma 部署 Rails 应用

简介 Rails 是一个用 Ruby 编写的开源 Web 应用程序框架。它遵循“约定优于配置”的理念&#xff0c;通过假设有一种“最佳”做事方式&#xff0c;让你在不必浏览无尽的配置文件的情况下编写更少的代码&#xff0c;同时实现更多功能。 Nginx 是一个高性能的 HTTP 服务器、反向…

机器学习常用框架

机器学习是人工智能的一个重要分支&#xff0c;它通过让计算机系统利用数据自我学习来改进任务执行的能力。在机器学习领域&#xff0c;有许多成熟的框架被广泛使用&#xff0c;这些框架提供了构建和训练机器学习模型的工具。以下是一些常用的机器学习框架&#xff1a; Tensor…

001——体验鸿蒙(基于I.MAX6ULL)

目录 一、下载资料 二、体验鸿蒙 三、编译Liteos-a 用的韦东山老师的板子和资料&#xff0c;在它的基础上二次开发可以节约很多时间。我就剩45天了。 一、下载资料 二、体验鸿蒙 看到老师的资料里有这张图 这个很详细值得一看&#xff0c;我买的mini板 需要用这个自研的软…