使用eqmx搭建MQTT服务端

一、下载安装

1.下载并安装emqx服务器

下载链接:Windows | EMQX 5.3 文档

2.下载完解压放到一个目录下

3.进入bin目录下,按住键盘Shift,鼠标右击打开终端窗口

4.输入命令“.\emqx start”启动服务

二、登录MQTT后台

1. 登录MQTT服务器后台管理界面

①通过浏览器访问http://localhost:18083/(localhost 可替换为您的实际 IP 地址),如下图所示。

②输入默认账号和默认密码,登录MQTT服务器后台管里界面
输入默认账号为“admin”,默认密码为“public”,然后点击登录按钮,进入MQTT服务器后台管里界面。(首次登录需修改密码,可跳过),登录成功后,MQTT服务器后台管里界面,如下图所示。

2.增加MQTT用户

(1). 创建认证
点击按钮创建认证,选择Password-Based认证(即用户名、密码认证),如下图所示。

(2).选择内置数据库

(3).配置参数,账号类型选中“username”,密码加密方式选中“sha256”,加盐方式选中“suffix”,如下图所示。

(4).创建用户
如下图所示,创建认证后,点击“用户管理”,进入用户管理界面。

用户名密码自定义。

三、使用EMQX的(MQTT客户端),如下图所示。

1.下载安装,无脑下一步

2.将MQTT5.0客户端工具的语言设置为“简体中文”,步骤下图所示。

3.建立两个mqtt连接

点击添加订阅,填写topic

使用测试1向topic(alarm)中发送数据,测试2订阅topic(alarm)

接收到消息,完成测试。

结束语

本文介绍了,如何在Windows环境下搭建MQTT服务器,怎样进入MQTT服务器后台管理界面,如何在MQTT服务器上添加用户,如何通过MQTT客户端连接MQTT服务器,并通过两个MQTT客户端演示了MQTT通信的简单发布主题和订阅主题。

下篇文章中,将会详细讲述如何使用SpringBoot集成MQTT客户端,断线重连,以及使用Excel工具管理订阅topic。

### 使用 Java 实现 MQTT 服务端 在 Java 中实现 MQTT 服务端可以通过多种方式完成,通常会基于现有的库或者框架来简化开发过程。以下是详细的说明以及示例代码。 #### 1. **相关依赖** 为了构建 MQTT 服务端,可以引入 `Eclipse Mosquitto` 或者其他支持 MQTT 协议的 Broker 库作为基础组件。如果需要完全自定义,则可以选择更底层的方式实现协议解析逻辑。对于大多数场景来说,推荐使用成熟的开源工具[^3]。 ```xml <dependencies> <!-- MQTT Client Library --> <dependency> <groupId>org.eclipse.paho</groupId> <artifactId>org.eclipse.paho.client.mqttv3</artifactId> <version>1.2.5</version> </dependency> <!-- Optional: Netty for advanced networking features --> <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.80.Final</version> </dependency> </dependencies> ``` 上述 Maven 配置包含了用于客户端交互的核心库 `Paho MQTT` 和可选网络增强库 `Netty`[^1]。 --- #### 2. **核心代码** ##### (1) **配置文件** 创建一个简单的属性文件 (`application.properties`) 来存储连接参数: ```properties mqtt.broker.url=tcp://localhost:1883 mqtt.username=admin mqtt.password=password mqtt.topic=test/topic ``` 此部分主要用于设置默认的 Broker 地址和其他必要的认证信息。 ##### (2) **配置类** 通过 Spring Boot 的自动装配机制加载环境变量并初始化上下文: ```java import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; @Configuration public class MqttConfig { private final Environment env; public MqttConfig(Environment env) { this.env = env; } public String getBrokerUrl() { return env.getProperty("mqtt.broker.url"); } public String getUsername() { return env.getProperty("mqtt.username"); } public String getPassword() { return env.getProperty("mqtt.password"); } } ``` 该类负责读取外部化配置项,并提供给后续模块调用。 ##### (3) **回调处理** 当消息到达时触发事件处理器逻辑: ```java import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; import org.eclipse.paho.client.mqttv3.MqttCallbackExtended; import org.eclipse.paho.client.mqttv3.MqttMessage; public class MqttCallbackHandler implements MqttCallbackExtended { @Override public void connectionLost(Throwable cause) { System.out.println("Connection lost! Cause: " + cause.getMessage()); } @Override public void messageArrived(String topic, MqttMessage message) throws Exception { System.out.printf("Received message on topic '%s': %s%n", topic, new String(message.getPayload())); } @Override public void deliveryComplete(IMqttDeliveryToken token) { System.out.println("Message delivered successfully."); } @Override public void connectComplete(boolean reconnect, String serverURI) { System.out.println("Connected to broker at URI: " + serverURI); } } ``` 这段代码实现了基本的消息接收功能,同时捕获异常状态变化通知。 ##### (4) **服务接口与实现** 定义统一的操作入口以便于扩展维护: ```java // Interface Definition public interface MqttService { boolean publish(String topic, String payload); } // Implementation Class @Service public class MqttServiceImpl implements MqttService { private final MqttClient client; public MqttServiceImpl(MqttConfig config) throws Exception { this.client = new MqttClient(config.getBrokerUrl(), MqttClient.generateClientId()); this.client.setCallback(new MqttCallbackHandler()); MqttConnectOptions options = new MqttConnectOptions(); options.setUserName(config.getUsername()); options.setPassword(config.getPassword().toCharArray()); this.client.connect(options); } @Override public boolean publish(String topic, String payload) { try { MqttMessage message = new MqttMessage(payload.getBytes()); message.setQos(2); // Ensure reliable delivery client.publish(topic, message); return true; } catch (Exception e) { e.printStackTrace(); return false; } } } ``` 这里展示了如何封装发送操作到指定主题下的具体流程。 --- #### 总结 以上内容涵盖了从依赖管理到实际编码的关键环节。值得注意的是,在生产环境中还需考虑安全性加固措施(如 TLS 加密)、性能优化策略以及其他高级特性集成等问题[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值