跟踪mqttv3源码(一)
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源码(一)的更多相关文章
- 跟踪mqttv3源码(二)
对于spring-mqtt.xml中的标签: <int-mqtt:message-driven-channel-adapter> <int-mqtt:outbound-channel ...
- [转载 java 技术栈] eclipse 阅读跟踪 Java 源码的几个小技巧!
本文基于Eclipse IDE,我们每天都使用的IDE其实提供了很多强大的功能,掌握它们,往往能够事半功倍. 1.Quick Type Hierarchy 快速查看类继承体系. 快捷键:Ctrl + ...
- Qemu+gdb跟踪内核源码
1.编译安装Qemu Qemu源码下载地址:http://wiki.qemu.org/Download linux下可以直接用wget下载: wget http://wiki.qemu.org/dow ...
- myeclipse 跟踪struts 源码失败
解决办法: 找到工程jar包所在的位置,点击右键:properties 点击external folder 找到 这个包下的src文件夹 导入之后, 源码会变色
- 跟踪LinkedList源码,通过分析双向链表实现原理,自定义一个双向链表
1.LinkedList实现的基本原理 LinkedList是一个双向链表,它主要有两个表示头尾节点的成员变量first .last,因其有头尾两个节点,所以从头或从尾操作数据都非常容易快捷.Lin ...
- wp8路线跟踪应用源码详细说明
目录 介绍 应用程序界面 定时执行 定位追踪 设置地图Pitch和Heading属性 后台位置追踪 Live Tile 总结 介绍 我从Windows Phone7 还在测试阶段的时候就开始开发了,所 ...
- 跟踪调试JDK源码时遇到的问题及解决方法
目录 问题描述 解决思路 在IntelliJ IDEA中调试JDK源码 在eclipse中调试JDK源码 总结 问题描述 最近在研究MyBatis的缓存机制,需要回顾一下HashMap的实现原理.于是 ...
- Thread.interrupt()源码跟踪
1 JDK源码跟踪 // java.lang.Thread public void interrupt() { if (this != Thread.currentThread()) checkAcc ...
- spring security 认证源码跟踪
spring security 认证源码跟踪 在跟踪认证源码之前,我们先根据官网说明一下security的内部原理,主要是依据一系列的filter来实现,大家可以根据https://docs.sp ...
随机推荐
- 机器学习算法GBDT
http://www-personal.umich.edu/~jizhu/jizhu/wuke/Friedman-AoS01.pdf https://www.cnblogs.com/bentuwuyi ...
- Wireshark使用介绍(二):应用Wireshark观察基本网络协议
TCP: TCP/IP通过三次握手建立一个连接.这一过程中的三种报文是:SYN,SYN/ACK,ACK. 第一步是找到PC发送到网络服务器的第一个SYN报文,这标识了TCP三次握手的开始. 如果你找不 ...
- .NET Core 微服务
github 上的资源: EshopOnContainers AiurSoft : 微服务框架 Server酱:是一款「程序员」和「服务器」之间的通信软件. http://sc.ftqq.com/3. ...
- CentOS7上手动部署入门级kubernetes
前言 翻看了很多的kubernetes的安装教程,也反复做了一些实验,深感教程之复杂,所以决定写一个极简版本的安装教程,目标在于用尽可能少的参数启动服务,并且剖析各组件关系,然后再在此基础上逐步添加参 ...
- css学习-》养成路线
雅虎工程师提供的CSS初始化示例代码 body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input, ...
- vue-cli3使用webpack-spritesmith配置雪碧图
一.背景问题 项目中如果有大量的小图标,如果不使用阿里的iconfont.UI给一个加一个,加一个引用一个,每个图标虽然很小,但是也是一次请求,每次请求都是消耗性能资源的. 二.解决思路 使用webp ...
- BottomNavigationBarItem fixed
BottomNavigationBar( type: BottomNavigationBarType.fixed, onTap: (value){ if more then 3 items,, use ...
- UITextField只能输入数字NSCharacterSet实现
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementS ...
- axure原型设计
在上一个学期的学习中,我们已经初步学习了axure的使用方法,它可以为负责定义需求设计,功能和界面的人员能快速设计出所需产品. 引入:在我们想为软件设计原型的时候,纸质原型很难表达交互的界面,与此同时 ...
- 629D - Babaei and Birthday Cake
题意:给定n个圆柱体的半径和高,输入顺序即圆柱体的编号顺序.现在规定,只有编号和体积均大于另一个圆柱体,才能放到另一个圆柱体的体积上面.求能叠加的最大体积是多少. 酝酿了我三天,才理解.自己敲个代码, ...