MQTT 4 ——MQTT的Spring Mvc 配置接收字节流数据
时间:2020-05-21
本文章向大家介绍MQTT 4 ——MQTT的Spring Mvc 配置接收字节流数据,主要包括MQTT 4 ——MQTT的Spring Mvc 配置接收字节流数据使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本篇记录一下MQTT整合Spring Mvc配置直接收发字节流数据
设备方是纯C开发,并且为了交互数据的安全,将传送的数据用了AES CBC进行了加密。
接下来正常方便做法应该是
将加密后的字节流转换成16进制字符串 或 Base64字符串进行传送;接收方收到字符串后,再转换成字节流进行解密即可。
但是,设备开发方坚持不改,直接把加密后的字节流数据放到MQTT里面传过来了。所以之前配置的SPRING MQTT,就无法正常转换数据了,接收到的字节流不论怎么进行转换都是乱码的格式,无法正常进行AES CBC解密。
解决办法
解决办法也很简单直接,修改原来的Spring-mqtt配置文件,引入一个新的converter,并且配置payloadAsBytes为true即可
与正常的配置文件相比,区别就是在MqttPahoMessageHandler 和 message-driven-channel-adapter 中都引入一个自定义的myConvert;然后配置myConvert bean,直接继承DefaultPahoMessageConverter,设置payloadAsBytes 为ture.
下面是详细的spring-mqtt.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:int="http://www.springframework.org/schema/integration"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:int-mqtt="http://www.springframework.org/schema/integration/mqtt"
xsi:schemaLocation="
http://www.springframework.org/schema/integration
http://www.springframework.org/schema/integration/spring-integration-4.1.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/integration/mqtt
http://www.springframework.org/schema/integration/mqtt/spring-integration-mqtt-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd ">
<context:property-placeholder location="classpath:mqtt.properties" ignore-unresolvable="true"/>
<!--MQTT配置-->
<bean id="clientFactory"
class="org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory">
<property name="userName" value="${mqtt.username}"/>
<property name="password" value="${mqtt.password}"/>
<property name="cleanSession" value="${mqtt.cleanSession}"/>
<property name="keepAliveInterval" value="${mqtt.keepAliveInterval}"/>
<property name="serverURIs">
<array>
<value>${mqtt.serverURI1}</value>
</array>
</property>
</bean>
<bean id="mqttHandler" class="org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler">
<constructor-arg name="clientId" value="${mqtt.clientId}"/>
<constructor-arg name="clientFactory" ref="clientFactory"/>
<property name="converter" ref="myConvert"/>
<property name="async" value="${mqtt.async}"/>
<property name="defaultQos" value="${mqtt.defaultQos}"/>
<property name="completionTimeout" value="${mqtt.completionTimeout}"/>
</bean>
<!-- 消息适配器 -->
<int-mqtt:message-driven-channel-adapter
id="mqttInbound" client-id="${mqtt.clientId}" url="${mqtt.serverURI1}"
topics="${mqtt.topic}" qos="${mqtt.defaultQos}" client-factory="clientFactory" auto-startup="true"
converter="myConvert"
send-timeout="${mqtt.completionTimeout}" channel="startCase" />
<int:channel id="startCase" />
<!-- 消息处理类 -->
<int:service-activator id="handlerService"
input-channel="startCase" ref="mqttCaseService" method="handler" />
<bean id="myConvert" class="org.springframework.integration.mqtt.support.DefaultPahoMessageConverter">
<property name="payloadAsBytes" value="true" />
</bean>
<!-- 消息处理 -->
<bean id="mqttCaseService" class="com.loong.mqtt.service.impl.MqttServiceImpl" />
</beans>
原文地址:https://www.cnblogs.com/jedi2015/p/12928648.html
- Tomcat搭建文件服务器
- Windows下SLmail邮件服务器缓冲区溢出理解及实验
- java使用mina和websocket通信
- 【机器学习】10 种机器学习算法的要点
- 写一个BASIC认证的https协议
- java发送邮件功能,以发送qq邮件为例
- spring boot加载复杂的yml文件获取不到值的问题
- JUC包下的CountDownLatch,CyclicBarrier,Semaphore
- java队列,ArrayBlockingQueue
- 多线程使用wait和notify做生产者消费者模型导致线程全部假死
- 偏执的iOS逆向研究员:收集全版本的macOS iOS+越狱+内核调试
- java 多线程暂停与恢复:suspend,resume
- ArrayList底层实现
- Master-work模式
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Android开发 经验技巧汇总(基于Android Studio)(二)
- 表格滑动和图片链接,mdnice安排上了!
- 数据库编程 MySQL 常见异常和解决办法
- 持续集成利器,GitHub Actions
- 已拿Offer!百度、字节跳动等后台面经
- Python Networkx基础知识及使用总结
- AkShare-沪深港通持股-个股排行
- Python SQLite常见异常及解决办法
- IPC—进程间通信的基础概念
- Python Django开发 经验技巧总结(一)
- Python SQLite 基本操作和经验技巧(二)
- AkShare-股票数据-主要股东
- 进程间通信的方式(1)
- Python Django开发 经验技巧总结(二)
- 进程间通信的方式(2)