SpringBoot + Vue 智慧停车之消息队列 MQTT 使用

2021/07/12 13:37
阅读数 57

简介

MQTT:它构建在TCP/IP之上,用于受限制的设备和不可靠的网络,应用于许多(开放源码)代理实现和许多客户机库。它包含用于不良网络/连接的IoT特定特性,并被广泛使用(主要用于物联网,但也通过MQTT通过WebSockets用于web和移动应用程序)。

MQTT 安装

这里使用 Docker 一键安装:

docker run -d --name emqx -p 1883:1883 -p 8081:8081 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:4.3.5

默认账号 admin 密码 public

整合

配置 pom.xml 引入:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-integration</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-mqtt</artifactId>
</dependency>

配置 application.properties 引入:

spring.mqtt.username = admin
spring.mqtt.password = public
spring.mqtt.url = tcp://127.0.0.1:1883
spring.mqtt.client.id = HDC-DNC
spring.mqtt.default.topic = topic
spring.mqtt.default.completionTimeout = 3000

发送配置:

@Slf4j
@Configuration
@IntegrationComponentScan
public class MqttSenderConfig {

@Value("${spring.mqtt.username}")
private String username;
@Value("${spring.mqtt.password}")
private String password;
@Value("${spring.mqtt.url}")
private String hostUrl;
@Value("${spring.mqtt.client.id}")
private String clientId;
@Value("${spring.mqtt.default.topic}")
private String defaultTopic;
@Value("${spring.mqtt.default.completionTimeout}")
private int completionTimeout;

@Bean
public MqttConnectOptions getMqttConnectOptions() {
MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();
mqttConnectOptions.setCleanSession(true);
mqttConnectOptions.setConnectionTimeout(10);
mqttConnectOptions.setKeepAliveInterval(90);
mqttConnectOptions.setAutomaticReconnect(true);
mqttConnectOptions.setUserName(username);
mqttConnectOptions.setPassword(password.toCharArray());
mqttConnectOptions.setServerURIs(new String[]{hostUrl});
mqttConnectOptions.setKeepAliveInterval(2);
return mqttConnectOptions;
}

@Bean
public MqttPahoClientFactory mqttClientFactory() {
DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
factory.setConnectionOptions(getMqttConnectOptions());
return factory;
}

@Bean
@ServiceActivator(inputChannel = "mqttOutboundChannel")
public MessageHandler mqttOutbound() {
MqttPahoMessageHandler messageHandler = new MqttPahoMessageHandler(clientId, mqttClientFactory());
messageHandler.setAsync(true);
messageHandler.setDefaultTopic(defaultTopic);
return messageHandler;
}

@Bean
public MessageChannel mqttOutboundChannel() {
return new DirectChannel();
}

}

接口服务:

@MessagingGateway(defaultRequestChannel = "mqttOutboundChannel")
public interface MqttGateway {

void sendToMqtt(String data, @Header(MqttHeaders.TOPIC) String topic);

}

源码:gitee.com/52itstyle/smart-parking

推荐一个超级简单 Java 图形验证码模块
分享一个支付大屏实时监控数据平台
推荐一款清爽的实时监控大屏附安装教程
大屏监控 Metabase 集成到 Java 项目
一个超牛逼的 Java 文件在线预览项目
如何保障消息100%投递成功、消息幂等性
技术人,做的越多你才能走的更远
传统功夫,点到为止,这次不搞偷袭!
小清新前后端分离后台管理系统
一个开源免费的车牌识别训练实战项目
霸气分享 74 款绚丽的监控大屏
一个基于 Vue3.x 的数据可视化大屏项目
推荐一款基于 Vue 的电商级海报生成器
SpringBoot 的接口快速开发框架
基于 SpringBoot + Vue 的智能停车场管理平台

本文分享自微信公众号 - 爪哇笔记(Java_notes)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部