Spring整合MQTT

pom.xml

<!-- MQTT消息队列 -->
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.1</version>
</dependency>
<!-- 消息推送
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>4.1.0</version>
</dependency>
-->
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-mqtt</artifactId>
<version>4.3.5.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.eclipse.paho</groupId>
<artifactId>mqtt-client</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-messaging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-core</artifactId>
<version>5.0.0.M5</version>
</dependency>
--> <dependency>
<groupId>org.fusesource.mqtt-client</groupId>
<artifactId>mqtt-client</artifactId>
<version>1.14</version>
</dependency>

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:mqtt="http://www.springframework.org/schema/integration/mqtt"
xmlns:int-mqtt="http://www.springframework.org/schema/integration/mqtt"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/integration/mqtt http://www.springframework.org/schema/integration/mqtt/spring-integration-mqtt-4.3.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration-4.3.xsd"> <!-- 引入配置文件:classpath等同于src目录,两种配置方式 -->
<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="${broker.userName}"/>
<property name="password" value="${broker.password}"/>
</bean> <!--
消息适配器 org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter
org.springframework.messaging.MessageChannel
org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler
DefaultPahoMessageConverter
-->
<!-- 消息转换器
<bean id="myConverter" class="org.springframework.integration.mqtt.support.DefaultPahoMessageConverter"></bean>
--> <int-mqtt:message-driven-channel-adapter
id="mqttInbound"
client-id="client"
url="${broker.host}"
topics="activate"
qos="1"
client-factory="clientFactory"
auto-startup="true"
send-timeout="12"
recovery-interval="10000"
channel="startCase" /> <!--
<int:channel id="startCase" />
--> <!-- 对接收消息进行过滤 @tstamp + ' ' + headers.get('mqtt_topic') + ': ' + payload.toString() + @newline
<int:transformer id="convert"
input-channel="startCase"
expression="payload.toString() + headers.get('mqtt_topic')"
output-channel="toMqttService" />
--> <!-- 方案一 -->
<int:service-activator id="startCaseService"
input-channel="startCase" ref="mqttCaseService" method="startCase" /> <!-- 方案二 id="toMqttService" channel="toMqttService"
<int:outbound-channel-adapter id="toMqttService"
ref="mqttCaseService"
method="startCase" />
--> <bean id="mqttCaseService" class="com.vguang.service.impl.MqttService2"></bean> </beans>

实现消息处理类

public class MqttService2{
private static final Logger log = LoggerFactory.getLogger(MqttService2.class); private MqttPahoMessageHandler mqtt;
private volatile Integer serialno = 0; public void startCase(Message<String> recmsg){
//mqtt5.0
// String topic = (String) recmsg.getHeaders().get("mqtt_receivedTopic");
String topic = (String) recmsg.getHeaders().get("mqtt_topic");
String payload = recmsg.getPayload(); log.info("消息解析headers结果:{},{}", topic, payload);
}
}

startCase()方法中的参数目前我知道的有三种:

跟踪mqttv3源码(一)的更多相关文章

  1. 跟踪mqttv3源码(二)

    对于spring-mqtt.xml中的标签: <int-mqtt:message-driven-channel-adapter> <int-mqtt:outbound-channel ...

  2. [转载 java 技术栈] eclipse 阅读跟踪 Java 源码的几个小技巧!

    本文基于Eclipse IDE,我们每天都使用的IDE其实提供了很多强大的功能,掌握它们,往往能够事半功倍. 1.Quick Type Hierarchy 快速查看类继承体系. 快捷键:Ctrl + ...

  3. Qemu+gdb跟踪内核源码

    1.编译安装Qemu Qemu源码下载地址:http://wiki.qemu.org/Download linux下可以直接用wget下载: wget http://wiki.qemu.org/dow ...

  4. myeclipse 跟踪struts 源码失败

    解决办法: 找到工程jar包所在的位置,点击右键:properties 点击external folder 找到  这个包下的src文件夹 导入之后, 源码会变色

  5. 跟踪LinkedList源码,通过分析双向链表实现原理,自定义一个双向链表

    1.LinkedList实现的基本原理 LinkedList是一个双向链表,它主要有两个表示头尾节点的成员变量first  .last,因其有头尾两个节点,所以从头或从尾操作数据都非常容易快捷.Lin ...

  6. wp8路线跟踪应用源码详细说明

    目录 介绍 应用程序界面 定时执行 定位追踪 设置地图Pitch和Heading属性 后台位置追踪 Live Tile 总结 介绍 我从Windows Phone7 还在测试阶段的时候就开始开发了,所 ...

  7. 跟踪调试JDK源码时遇到的问题及解决方法

    目录 问题描述 解决思路 在IntelliJ IDEA中调试JDK源码 在eclipse中调试JDK源码 总结 问题描述 最近在研究MyBatis的缓存机制,需要回顾一下HashMap的实现原理.于是 ...

  8. Thread.interrupt()源码跟踪

    1 JDK源码跟踪 // java.lang.Thread public void interrupt() { if (this != Thread.currentThread()) checkAcc ...

  9. spring security 认证源码跟踪

    spring security 认证源码跟踪 ​ 在跟踪认证源码之前,我们先根据官网说明一下security的内部原理,主要是依据一系列的filter来实现,大家可以根据https://docs.sp ...

随机推荐

  1. 判断文件的编码 python

    import chardet import string path1= r'C:\Users\25456\Desktop' path = path1 + r'\深度学习.txt' with open( ...

  2. sqlserver可将字符转成数字再进行sum,如果varchar类型中存放的都是数字

    sqlserver语法: select sum(cast(score as int)) as score from 表名; 注意:int是整型,在实际操作中根据自己需要的类型转换.

  3. activemq修改端口

    1.修改TCP 61616端口 cd /apps/svr/activemq/conf cat activemq.xml |grep transportConnector <transportCo ...

  4. Haproxy + Keepalived +PXC 常见错误

    1. Apr 21 19:15:54 pxc1 systemd[1]: mysql@bootstrap.service: main process exited, code=exited, statu ...

  5. java.sql.SQLException: ORA-28000: the account is locked

    解决方式:参考博客https://blog.csdn.net/java280580332/article/details/70756533

  6. ceph rbd双挂载导致ext4文件系统inode链接数据污染

    转载自:https://my.oschina.net/xueyi28/blog/1596003 ###故障现象 /data/rbd1/dir1/a/file1 /data/rbd1/dir2/a/fi ...

  7. MyBatis笔记(二) 最简单的insert命令

    接上一篇随笔.这里没有用到MyBatis最关键的映射器接口,因此只做个简单的insert操作,update和delete同理,就不再赘述了. 直接上代码: 首先是dao包下的UserDAO.java文 ...

  8. oracle中新建用户和赋予权限

    1.新建个用户 create user xxxxx(用户名) identified by "密码" alert user 用户名 identified by “新密码” --修改用 ...

  9. django url 反响解析,视图

    1. 内容回顾 1. 模板语言(字符串替换) 1. 母版和继承 1. 什么时候用母版? html页面有重复的代码,把它们提取出来放到一个单独的html文件. (比如:导航条和左侧菜单) 2. 子页面如 ...

  10. git遇到error: RPC failed; curl 18 transfer closed with outstanding read data remaining fatal: The remote end hung up unexpectedly fatal: early EOF fatal: index-pack failed failed怎么办?

    答: 将clone地址中的https://替换成git://即可解决 如: 将https://git.openwrt.org/project/luci.git修改为git://git.openwrt. ...