QMQTT + EMQ环境搭建

本文介绍了如何编译QMQTT库,创建MQTT客户端,部署EMQ服务器,并利用RawCap抓包分析MQTT协议。通过步骤详细指导,包括Qt Creator配置、库的添加、EMQ X服务器的安装与启动,以及使用RawCap抓取并分析MQTT通信包。

 

本文主要介绍QMQTT的编译、客户端的简单应用、EMQ服务器的部署三个方面:

 

目录

1、QMQTT库的编译 

2、写一个简单的客户端 

3、部署EMQ服务器 

4、抓包查看MQTT协议 


QMQTT源码的下载路径:https://github.com/emqx/qmqtt

下载完成后,可以先打开源码路径下的README.md文件看一下,里面有对编译和应用的引导说明。

1、用Qt Creator打开源码路径下的工程文件qmqtt.pro,如下图所示:

2、根据README.md中的提示,在工程配置文件中添加CONFIG += NO_UNIT_TESTS配置项,如下图所示:

3、点击运行完成编译,在编译后生成的文件夹下bin和lib文件夹中就是生成的动态库和静态库了。

写一个简单的客户端 

1、新建一个无界面的项目MqttClient,将刚才编译好的lib文件夹,以及源码路径下的qmqtt-master\src\mqtt文件夹拷贝到新建项目的根目录下:

在Spring Boot项目中集成MQTT协议并使用EMQX作为消息中间件,可以通过以下步骤实现: ### 配置依赖项 首先,在`pom.xml`文件中添加必要的依赖项以支持MQTT功能。推荐使用`spring-integration-mqtt`和`org.eclipse.paho`库来实现与EMQX的通信: ```xml <dependency> <groupId>org.springframework.integration</groupId> <artifactId>spring-integration-mqtt</artifactId> </dependency> <dependency> <groupId>org.eclipse.paho</groupId> <artifactId>org.eclipse.paho.client.mqttv3</artifactId> <version>1.2.5</version> </dependency> ``` ### 配置MQTT连接信息 在`application.properties`或`application.yml`中配置EMQX服务器的相关参数,例如主机地址、端口、客户端ID等: ```properties mqtt.broker.url=tcp://localhost:1883 mqtt.client.id=spring-boot-client mqtt.topic=default/topic mqtt.qos=1 ``` ### 创建MQTT配置类 创建一个Java配置类来初始化MQTT客户端工厂和消息处理组件: ```java import org.eclipse.paho.client.mqttv3.MqttConnectOptions; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory; import org.springframework.integration.mqtt.core.MqttPahoClientFactory; import org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler; @Configuration public class MqttConfig { @Value("${mqtt.broker.url}") private String brokerUrl; @Value("${mqtt.client.id}") private String clientId; @Bean public MqttPahoClientFactory mqttClientFactory() { DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory(); MqttConnectOptions options = new MqttConnectOptions(); options.setServerURIs(new String[]{brokerUrl}); factory.setConnectionOptions(options); return factory; } @Bean public MqttPahoMessageHandler mqttMessageHandler(MqttPahoClientFactory mqttClientFactory) { MqttPahoMessageHandler handler = new MqttPahoMessageHandler("handlerClientId", mqttClientFactory); handler.setDefaultTopic("default/topic"); return handler; } } ``` ### 发布和订阅消息 通过编写服务类来发布消息到指定主题,并监听来自EMQX的消息: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.integration.mqtt.support.MqttHeaders; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHeaders; import org.springframework.messaging.support.MessageBuilder; import org.springframework.stereotype.Service; @Service public class MqttService { @Autowired private MqttPahoMessageHandler mqttMessageHandler; public void publishMessage(String topic, String payload) { Message<String> message = MessageBuilder.withPayload(payload) .setHeader(MqttHeaders.TOPIC, topic) .build(); mqttMessageHandler.handleMessage(message); } } ``` 同时,可以使用`@ServiceActivator`注解来监听特定主题的消息: ```java import org.springframework.integration.annotation.ServiceActivator; import org.springframework.messaging.Message; import org.springframework.stereotype.Component; @Component public class MqttListener { @ServiceActivator(inputChannel = "mqttInboundChannel") public void handleIncomingMessage(Message<?> message) { System.out.println("Received message: " + message.getPayload()); } } ``` ### 启动MQTT客户端 确保在Spring Boot应用启动时自动连接到EMQX服务器。可以在主类中添加逻辑来触发连接过程。 --- 上述方法基于常见的Spring Boot MQTT集成实践,并结合了对EMQX的支持[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书灯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值