Windows上安装EMQX作为MQTT服务器以及配置MQTTX客户端

news2024/11/15 6:54:12

一、安装EMQX MQTT服务器

EMQX 是一个高性能、可扩展的物联网消息中间件,EMQX 实现了 MQTT 协议的服务器端,即 MQTT Broker,它负责接收来自客户端的连接请求,处理订阅、发布消息,并将消息转发给相应的订阅者。

下载EMQX

EMQX官方网站 https://www.emqx.com/zh/try?product=broker 提供了EMQX开源版软件包

但是5.3.2版本以后就没有提供Windows系统软件包,需要到这里下载https://www.emqx.com/zh/downloads/broker

在这里插入图片描述
解压

在这里插入图片描述

配置EMQX,EMQX的配置文件位于etc\emqx.conf,可以根据需要修改配置文件,例如更改端口号、添加插件等

在这里插入图片描述

启动EMQX,进入\bin目录下,启动cmd输入emqx start

在这里插入图片描述
检查启动状态emqx_ctl status
在这里插入图片描述

可以在任务管理器中看到erl.exe是否运行

在这里插入图片描述

访问EMQX Dashboard,启动EMQX 后,进入http://127.0.0.1:18083中,帐号admin,密码public
8083 MQTT/WebSocket 端口
18083 EMQX Dashboard 管理控制台端口
在这里插入图片描述

登录后右上角设置,可以切换成简体中文

在这里插入图片描述

右侧栏第一个菜单,可查看集群概览

在这里插入图片描述

右侧栏第二个菜单,选择客户端认证,创建客户端认证,选择内置数据库,默认参数配置

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

选择用户管理,添加用户账号:admin 密码:public

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、安装及配置MQTTX客户端

MQTTX 则是一个轻量级的 MQTT 客户端工具,主要用于测试和调试 MQTT 应用程序。

下载MQTTX

访问MQTTX的官方下载页面https://mqttx.app/zh

在这里插入图片描述

双击下载的exe文件,选择安装目录并点击完成

在这里插入图片描述

在这里插入图片描述

配置连接到EMQX

在MQTTX中点击“+”添加新的连接,输入连接名称,如“EMQX Server”,服务器地址填写为 localhost 或你的EMQX服务器的实际IP地址,端口默认为 1883,如果EMQX配置了SSL/TLS,应使用 8883,输入用户名和密码(如果EMQX配置了认证)

在这里插入图片描述

点击连接,可以开始订阅主题、发布消息等操作来测试MQTT通信。
在这里插入图片描述

在这里插入图片描述
在EMQX Dashboard可以看到客户端已经连接成功。
在这里插入图片描述

进入到WebSocket 客户端,可以进行订阅和发布的测试
在这里插入图片描述
在这里插入图片描述

三、EMQX目录结构

引用自:https://www.cnblogs.com/yking/p/15702684.html

不同安装方式得到的 EMQ X 其目录结构会有所不同,具体如下:

描述使用 ZIP 压缩包安装使用二进制包安装Homebrew(MacOS)安装
可执行文件目录./bin/usr/lib/emqx/bin/usr/local/bin
数据文件./data/var/lib/emqx/data/usr/local/Cellar/emqx/*/data
Erlang 虚拟机文件./erts-*/usr/lib/emqx/erts-*/usr/local/Cellar/emqx/*/erts-
配置文件目录./etc/etc/emqx/etc/usr/local/Cellar/emqx/*/etc
依赖项目录./lib/usr/lib/emqx/lib/usr/local/Cellar/emqx/*/lib
日志文件./log/var/log/emqx/usr/local/Cellar/emqx/*/log
启动相关的脚本、schema 文件./releases/usr/lib/emqx/releases/usr/local/Cellar/emqx/*/releases

以上目录中,用户经常接触与使用的是 binetcdatalog 目录。

bin 目录

emqx、emqx.cmd

EMQX 的可执行文件,具体使用可以查看 基本命令。

emqx_ctl、emqx_ctl.cmd

EMQX 管理命令的可执行文件,具体使用可以查看 管理命令 CLI。

etc 目录

EMQX 通过 etc 目录下配置文件进行设置,主要配置文件包括:

配置文件说明
emqx.confEMQX 配置文件
acl.confEMQX 默认 ACL 规则配置文件
plugins/*.confEMQX 各类插件配置文件
certsEMQX SSL 证书文件
emqx.licLicense 文件仅限 EMQX Enterprise

EMQX 具体的配置内容可以查看 配置项。

data 目录

EMQX 将运行数据存储在 data 目录下,主要的文件包括:

configs/app.*.config

EMQX 读取 etc/emqx.confetc/plugins/*.conf 中的配置后,转换为 Erlang 原生配置文件格式,并在运行时读取其中的配置。

loaded_plugins

loaded_plugins 文件记录了 EMQ X 默认启动的插件列表,可以修改此文件以增删默认启动的插件。loaded_plugins 中启动项格式为 {<Plugin Name>, <Enabled>}.<Enabled> 字段为布尔类型,EMQX 会在启动时根据 <Enabled> 的值判断是否需要启动该插件。关于插件的更多内容,请查看 插件。

$ cat loaded_plugins
{emqx_management,true}.
{emqx_recon,true}.
{emqx_retainer,true}.
{emqx_dashboard,true}.
{emqx_rule_engine,true}.
{emqx_bridge_mqtt,false}.

Mnesia

Mnesia 数据库是 Erlang 内置的一个分布式 DBMS,可以直接存储 Erlang 的各种数据结构。

EMQX 使用 Mnesia 数据库存储自身运行数据,例如告警记录、规则引擎已创建的资源和规则、Dashbaord 用户信息等数据,这些数据都将被存储在 mnesia 目录下,因此一旦删除该目录,将导致 EMQX 丢失所有业务数据。

可以通过 emqx_ctl mnesia 命令查询 EMQX 中 Mnesia 数据库的系统信息,具体请查看 管理命令 CLI。

log 目录

emqx.log.*

EMQX 运行时产生的日志文件,具体请查看 日志与追踪。

crash.dump

EMQX 的崩溃转储文件,可以通过 etc/emqx.conf 修改配置,具体内容可以查看 配置项。

erlang.log.*

emqx start 方式后台启动 EMQX 时,控制台日志的副本文件。

四、使用 Java SDK 连接

引用自:https://docs.emqx.com/zh/emqx/latest/connect-emqx/java.html

Eclipse Paho Java Client 是用 Java 编写的 MQTT 客户端库(MQTT Java Client),可用于 JVM 或其他 Java 兼容平台(例如Android)。

Eclipse Paho Java Client 提供了MqttAsyncClient 和 MqttClient 异步和同步 API。

通过 Maven 安装 Paho Java

通过包管理工具 Maven 可以方便地安装 Paho Java 客户端库,截止目前最新版本安装如下:

<dependency>
  <groupId>org.eclipse.paho</groupId>
	<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
	<version>1.2.2</version>
</dependency>

Paho Java 使用示例

Java 体系中 Paho Java 是比较稳定、广泛应用的 MQTT 客户端库,本示例包含 Java 语言的 Paho Java 连接 EMQX Broker,并进行消息收发完整代码:

App.java

package io.emqx;

import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;


public class App {
    public static void main(String[] args) {
        String subTopic = "testtopic/#";
        String pubTopic = "testtopic/1";
        String content = "Hello World";
        int qos = 2;
        String broker = "tcp://broker.emqx.io:1883";
        String clientId = "emqx_test";
        MemoryPersistence persistence = new MemoryPersistence();

        try {
            MqttClient client = new MqttClient(broker, clientId, persistence);

            // MQTT 连接选项
            MqttConnectOptions connOpts = new MqttConnectOptions();
            connOpts.setUserName("emqx_test");
            connOpts.setPassword("emqx_test_password".toCharArray());
            // 保留会话
            connOpts.setCleanSession(true);

            // 设置回调
            client.setCallback(new PushCallback());

            // 建立连接
            System.out.println("Connecting to broker: " + broker);
            client.connect(connOpts);

            System.out.println("Connected");
            System.out.println("Publishing message: " + content);

            // 订阅
            client.subscribe(subTopic);

            // 消息发布所需参数
            MqttMessage message = new MqttMessage(content.getBytes());
            message.setQos(qos);
            client.publish(pubTopic, message);
            System.out.println("Message published");

            client.disconnect();
            System.out.println("Disconnected");
            client.close();
            System.exit(0);
        } catch (MqttException me) {
            System.out.println("reason " + me.getReasonCode());
            System.out.println("msg " + me.getMessage());
            System.out.println("loc " + me.getLocalizedMessage());
            System.out.println("cause " + me.getCause());
            System.out.println("excep " + me);
            me.printStackTrace();
        }
    }
}

回调消息处理类 OnMessageCallback.java

package io.emqx;

import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttMessage;

public class OnMessageCallback implements MqttCallback {
    public void connectionLost(Throwable cause) {
        // 连接丢失后,一般在这里面进行重连
        System.out.println("连接断开,可以做重连");
    }

    public void messageArrived(String topic, MqttMessage message) throws Exception {
        // subscribe后得到的消息会执行到这里面
        System.out.println("接收消息主题:" + topic);
        System.out.println("接收消息Qos:" + message.getQos());
        System.out.println("接收消息内容:" + new String(message.getPayload()));
    }

    public void deliveryComplete(IMqttDeliveryToken token) {
        System.out.println("deliveryComplete---------" + token.isComplete());
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1974443.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大模型训练流程解析

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl训练大模型是一个复杂且资源密集的过程,它不仅仅要求大量的计算资源和时间,还涉及多个关键步骤和要素。这个过程需要从数据的收集、清洗、整理到模型的设计与选择,再到模型的训练、评估与优化,…

Netty4自学笔记 (3) - Netty NIO Server和Client 样例说明

全文详见个人独立博客&#xff1a;Netty4自学笔记 (3) - Netty NIO Server和Client 样例说明 Netty4自学笔记 (3) - Netty NIO Server和Client 样例说明更新节奏缓慢&#xff0c;因为每晚学习注意力不够集中&#xff0c;学习进展缓慢。本还给自己找了一大堆其他理由&#xff0…

tof系统标定流程之双频测距与代码详解

tof系统标定流程之双频测距目录 1、双频测距原理2、双频测距流程3、双频测距代码1、双频测距原理 为什么需要双频测距,只用一个频率测距不行吗?实际上一个频率的测距范围有限,以100MHZ/80MHZ/10MHZ/15MHZ的频率为例,其测距范围分别是1.5m,1.875m,15m,10m,频率越低测距范围…

TypeError: ‘dict’ object is not callable 深度解析

TypeError: ‘dict’ object is not callable 深度解析 在Python编程中&#xff0c;TypeError: dict object is not callable是一个常见的错误&#xff0c;通常发生在尝试调用一个字典对象时。这个错误表明代码中存在逻辑错误&#xff0c;可能是将字典误用为函数或方法。本文将…

C++第六篇 模板初阶和STL简介

目录 一&#xff0c;模板初阶 1.泛型编程 2.函数模板 2.1 函数模板概念 2.2 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 3.类模板(模板类&#xff0c;模板函数) 3.1 类模板定义格式 二&#xff0c;STL简介 1. 什么是STL 2. ST…

[环境配置]Pycharm:Failed to start [PowerShell.exe]

解决方法&#xff0c;点Local旁边的 号&#xff0c;点击Command Prompt&#xff0c;即可在Pycharm中呼出控制台。 如果要修改Command Prompt的启动时访问的cmd.exe的路径&#xff0c;可以去Settings→Tools→Terminal中&#xff0c;修改Shell Path实现&#xff0c;改为cmd.exe…

「AI绘画Stable Diffusion 零基础入门 」AI 绘画SD原理与工具介绍,万字详解新手入门必看!

大家好&#xff0c;我是设计师阿威 AI 绘画原理 想要入门 AI 绘画&#xff0c;首先需要了解它的原理是什么样的。 其实很早就已经有人基于深度学习模型展开了对图像生成的研究了&#xff0c;但在那时&#xff0c;生成的图像分辨率和内容都非常抽象。 直到近两年&#xff0c…

CentOS 8挂载本地源

CentOS 8挂载本地源 1.虚拟机连接centos镜像2.系统查看centos镜像是否在连接上3. 挂载ISO镜像4.配置YUM源1. 备份现有YUM源配置2. 创建新的YUM源配置文件3. 清理YUM缓存并重新生成 5.验证YUM源 1.虚拟机连接centos镜像 2.系统查看centos镜像是否在连接上 [rootlocalhost ~]# l…

【wiki知识库】07.用户管理后端SpringBoot部分

目录 一、今日目标 二、&#x1f388;SpringBoot部分类的添加 2.1 使用逆向工程新增User模块 2.2 UserQueryParam添加 2.3 UserSaveParam添加 2.4 UserResetPasswordParam添加 2.5 UserQueryVo添加 2.6 SnowFlake工具类 三、&#x1f686;后端新增接口 3.1 /user/li…

【应用层】远程登入管理设备 Telnet

文章目录 Telnet 概述Telnet 认证模式用户等级eNSP 搭建拓扑验证password认证方式登入&#xff08;不支持空密码登入&#xff09;AAA认证方式登入 eNSP连接真机环境配置telnetTelnet 配置命令汇总 Telnet 概述 Telnet是一种基于文本的网络协议&#xff0c;它允许用户通过虚拟终…

PHP开发【石头剪刀布小游戏】

石头剪刀布小游戏 玩法超级简单&#xff0c;你只需要在下面选择石头、剪刀或者布&#xff0c;然后提交&#xff0c;系统就会随机生成电脑的选择&#xff0c;告诉你最终的结果哦&#xff01; 游戏规则&#xff1a; 如果你的选择和电脑一样&#xff0c;那么就是平局。如果你赢…

十一、外观模式

文章目录 1 基本介绍2 案例2.1 Person 类2.2 Computer 类2.3 Player 类2.4 TV 类2.5 StudyManager 类2.6 Client 类2.7 Client 类运行结果2.8 总结 3 各角色之间的关系3.1 角色3.1.1 SubSystem ( 子系统 )3.1.2 Facade ( 窗口 )3.1.3 Client ( 客户端 ) 3.2 类图 4 注意事项5 在…

PointNet点云语义分割

在本教程中&#xff0c;我们将学习如何在斯坦福 3D 室内场景数据集 (S3DIS) 上训练 Point Net 进行语义分割。S3DIS 是一个 3D 数据集&#xff0c;包含来自多栋建筑的室内空间点云&#xff0c;占地面积超过 6000 平方米 [1]。Point Net 是一种新颖的架构&#xff0c;它使用整个…

基于JAVA的陶瓷工厂进销存管理系统的设计与实现

点击下载源码 基于JAVA的陶瓷工厂进销存管理系统的设计与实现 摘 要 时代在进步&#xff0c;我们的生产生活方式当然也要相对应的做出改变了。在今天这样一个信息化的时代&#xff0c;计算机软件已经广泛的被用于日常的办公&#xff0c;仓库的库存管理&#xff0c;企业的人员…

2024年热门开放式耳机评测!悠律、韶音、声阔到底该选谁?

开放式耳机选购技巧篇&#xff0c;可参考选购&#xff01; 作为一名数码评测博主&#xff0c;这两年用过的开放式耳机不下50款了&#xff0c;市面上的开放式耳机众多&#xff0c;很多人不知道该如何选择&#xff0c;其实选购都是有一定的技巧和规律性的&#xff0c;看配置就能…

无损下载器1.1.0.0(3.6M)支持批量下载无损音乐

无损音乐下载器。只有3.6M&#xff0c;简单试了一下感觉非常好用&#xff0c;不知道论坛里发过没有&#xff0c;也不知道作者是谁&#xff0c;非常感谢该软件的开发者&#xff01; 软件标题&#xff1a;无损下载器 版本号&#xff1a;1.1.0.0 使用步骤&#xff1a; 我们下载…

AVL解析

本节主要看板书 概念 AVL树&#xff08;Adelson-Velsky and Landis tree&#xff09;是一种自平衡二叉查找树&#xff0c;用于在动态集合中进行高效的插入、删除和查找操作。它保持树的高度接近最小可能值&#xff0c;从而确保这些操作的时间复杂度始终保持在O(log n)。AVL树…

OS—磁盘和固态硬盘

目录 一. 磁盘二. 磁盘的管理磁盘初始化分区引导块坏块 三. 磁盘调度算法磁盘存取时间磁盘调度算法先来先服务&#xff08;FCFS&#xff09;算法最短寻道时间优先&#xff08;Shorted Seek Time First,SSTF&#xff09;算法扫描&#xff08;SCAN&#xff09;算法LOOK 调度算法循…

30个可以帮程序员查询很多真相的网址

具体请前往&#xff1a;一站式综合查询导航 - 快递物流查询,国际区号查询,车牌号查询,航班动态查询,教育考试成绩和证书、学历、食品药品标准,招投标,知识产权,专利文献,企业信用,法律文书在线查询

13. 基于标定板的lidar到车体的外参标定思路

目录 1. 什么是lidar到车体的外参&#xff1f;2. 为什么要做这个外参矫正&#xff1f;3. 怎么做这个外参矫正&#xff1f;3.1 标定思路3.2 lidar检测标定板上的圆心流程介绍3.3 匹配过程 4. 老乡别走&#xff0c;一起来读书吧 1. 什么是lidar到车体的外参&#xff1f; 在机器人…