- 博客(52)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 MQTT之重复消息(6、在项目中遇到的问题)
仔细观察代码发现,我订阅的时候使用通配符订阅了所有消息,恰好没有对RTU执行代码之后发送消息的主题进行代码处理,导致broker一直收不到我的平台反馈,所以说broker一直不断地给平台发送信息。4、现在分析出主要是消息质量为1的时候导致,那就说明broker给平台发送消息的时候可能存在两种情况,第一就是broker收到多次重复消息,导致broker也给平台发送多次消息。5、如果是第一种情况,那我平台正常启动,就能消费订阅的信息,就不会出现我现在这种不断重复打印的情况,所以说第一种情况排除。
2025-03-30 23:33:13
982
原创 MQTT之重复消息(5、TCP重连和MQTT重连)
目录1. TCP 协议层的重传(原生机制)2. 触发 TCP 重传的具体场景3、TCP 重传的关键参数(了解)第一、重传超时(RTO - Retransmission Timeout)第二、重传次数第三、累计时间 vs 本次 RTO 的区别第四.常见问题解答第五.总结4、MQTT 重发机制和TCP重发机制对比5、MQTT关键超时时间设置(Springboot)1. 连接超时(Connect Timeout)2. 操作超时(Completion Timeout)3. Keepalive间隔4. 自动重连配置5
2025-03-28 18:02:51
921
原创 MQTT之重复消息(4、重复机制的核心原因详解)
层级设计要求导致重复的必然性协议层保证可靠性高于避免重复QoS 1 必须允许重复网络层不可靠传输重传机制必然存在应用层默认无状态处理不主动去重最终结论MQTT QoS 1 的重复是协议设计、网络特性和实现机制共同作用的必然结果,必须在应用层通过业务标识实现幂等处理。
2025-03-28 15:35:26
502
原创 MQTT之重复消息(3、PID相同和PID不同)
在上一篇文章中描述了PID相同产生的重复消息和PID不同产生的重复消息,这一篇文章解释一下为什么会有两种情况的产生。在 MQTT QoS 1 消息传递过程中,设备 B 重复接收消息的和的产生根源在于 MQTT 协议的分层处理机制和 Broker 的转发逻辑。
2025-03-28 14:56:02
876
原创 MQTT之重复消息(2、分析A-broker-B重复信息)
设计目标导致重复的必然性示例场景可靠性优先QoS 1 必须允许重传设备A未收到PUBACK时重发无状态协议不检查消息内容是否重复Broker 存储相同payload多次分层PID分配设备A与设备B的PID无关联PID=100 和 PID=200 指向同消息网络不可靠TCP重传+MQTT重发双重叠加单次丢包可能触发两次重传最终建议在 Spring Boot 实现中,必须结合业务唯一标识(如设备ID+时间戳)实现应用层去重,这是解决 MQTT QoS 1 重复问题的唯一可靠方案。
2025-03-28 11:57:41
900
原创 MQTT之重复消息(1、导致重复消息的因素)
通过理解这些根本原因,可以针对性设计去重策略,在10万台设备规模下将重复消息率控制在0.1%以下。{"type":"batch", "messages":[...]} // 可能包含历史数据。/proc/sys/net/ipv4/tcp_retries2 = 15 # 默认重试次数。i++) { // 固定次数重试。@Scheduled(fixedRate = 300000) // 5分钟补偿。// 典型设备端重试代码(Arduino)// 可能被不同消费者实例处理。// 可能造成重复补发。
2025-03-27 00:03:03
867
原创 MQTT之通讯协议
MQTT 5.0 通过引入会话控制、元数据扩展、流量管理等机制,显著提升了协议的可扩展性和灵活性,尤其适合大规模、复杂的物联网场景。开发者可根据需求选择 QoS、利用共享订阅优化负载,或通过用户属性传递业务上下文,实现高效通信。
2025-03-26 15:38:00
715
原创 VM虚拟机:虚拟机能ping通主机,主机ping不通虚拟机,永久解决办法。
最近在安装VM虚拟机的时候,出现了虚拟机能ping通主机,主机ping不通虚拟机。着实令人恶心,尤其是虚拟机在设置网络的时候,网上五花八门,修改什么配置的都有,最多的就是修改宿主机的ipv4,这种我个人感觉不可取。宿主机不要乱改配置,需要修改尽量在虚拟机中修改即可。还需要注意一点关键点,想要用永久解决一定是宿主机和虚拟机在同一网段下,很多同学上来就是一顿ping,根本不管是不是在同一网段下。兄弟们一定要选择桥接模式之后再点击下边的确定,很多朋友选择桥接忽略了下边的确定,各种出问题,就是找不到原因。
2024-09-02 18:08:41
2878
1
原创 springboot 自定义的全局捕获异常失效
如果没有的话,简单了。看一下你的这个子服务是否扫描到了公共服务中这个全局异常。如果启动时,打印了你写的字符串就说明,已经扫描到了该全局异常处理的类。我遇到只是一个简单的基础问题,今天记录一下。如何查看,很简单只需要写一段类加载打印代码,如下。首先看一下全局异常组件有么有被扫描到。
2024-07-03 21:53:23
722
原创 使用spring cloud config报错Fetching config from server at : http://localhost:8888
原因是application.yml启动优先级小于bootstrap.yml。将application.yml重命名为bootstrap.yml即可。
2024-06-18 22:18:37
498
1
原创 Jenkins打包maven-compiler-plugin该插件无法下载
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project ppedap-registry: Fatal error compiling: invalid target release: 11 -> [Help 1][ERROR] [ERROR] To see the full stack trace of the .
2021-03-16 11:39:44
2293
2
原创 Jenkins 打包服务出现 stderr: fatal: Not a valid object name HEAD 错误
Command "git read-tree -mu HEAD" returned status code 128:stdout: stderr: fatal: Not a valid object name HEAD > git checkout -f 08b6a5718b0beff9d1abf2a4c20a1e85bfd3c8d1 # timeout=10FATAL: Could not checkout 08b6a5718b0beff9d1abf2a4c20a1e85bfd3c8d1.
2021-03-15 18:56:14
1869
原创 为什么说Java中只有值传递
在开始深入讲解之前,有必要纠正一下大家以前的那些错误看法了。如果你有以下想法,那么你有必要好好阅读本文。错误理解一:值传递和引用传递,区分的条件是传递的内容,如果是个值,就是值传递。如果是个引用,就是引用传递。错误理解二:Java是引用传递。错误理解三:传递的参数如果是普通类型,那就是值传递,如果是对象,那就是引用传递。实参与形参我们都知道,在Java中定义方...
2019-08-22 11:47:08
203
原创 进程,线程,并发,并行,同步,异步
目录进程和线程什么是进程什么是线程进程和线程的联系并发并行线程切换线程切换的特点线程开销高并发通过多线程实现并发/并行异步同步异步与多线程的关系异步操作的优缺点多线程的优缺点适用范围进程和线程什么是进程进程就是应用程序的运行实例,是操作系统进行资源分配(包括cpu、内存、磁盘IO等)的最小单位。(也就是我们的应...
2019-04-20 16:37:42
511
原创 spring boot 返回的json中去掉值为null的属性
import com.fasterxml.jackson.databind.annotation.JsonSerialize;@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)public class AccountList { private String userName; private String rea...
2018-11-19 20:51:17
875
原创 Spring boot +Spring cloud 微服务的文件下载一直为乱码
因为再使用微服务的时候需要通过网关来调用服务,所以说再网关里面必须要把所有的流转为字节流这样才能保证不出出现乱码。网关的坑
2018-10-23 10:40:47
1790
原创 Intellij idea 出现错误 error:java: 无效的源发行版: 8解决方法
应该是在Module或Project上点击Open Module Settings,将 Sources下的language level改为你的jdk版本或以下
2018-08-15 17:14:53
756
原创 springBoot 全局异常捕捉(里面包含个各种常见异常)
import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.http.HttpStatus;import org.springframework.http.converter.HttpMessageNotReadableException;import org.springframework.v...
2018-06-02 16:52:12
7081
1
原创 Spring,SpringMVC,Struts2的区别
Spring 、SpringMVC 、Struts2之间的区别一、Spring与SpringMVC的区别: spring是一个开源框架,是为了解决企业应用程序开发,功能如下: 功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 范围:任何Java应用 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 1、轻量——从大小与开销两方面而言S...
2018-06-01 16:19:20
251
原创 SSH框架介绍
SSH 为 struts+spring+hibernate 的一个集成框架,是目前较流行的一种JAVA Web应用程序开源框架。 Struts Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注。Struts把Servlet、JSP、自定义标签和信息资源(mes...
2018-06-01 15:53:44
1371
原创 linux 下tar使用方法
tar-c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。-z:有gzip属性的-j:有bz2属性的-Z:有compress属性的-v:显示所有过程-O:将文件解
2017-12-13 15:17:52
338
原创 linux下配置jdk
修改.bash_profile文件 这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的.bash_profile文件就可以了。 ·用文本编辑器打开用户目录下的.bash_profile文件 ·在.bash_profile文件末尾加入: export JAVA_HOME=/usr/shar
2017-12-13 15:14:37
184
转载 用通俗易懂的话说下hadoop是什么,能做什么
hadoop是什么?(1)Hadoop是一个开源的框架,可编写和运行分布式应用处理大规模数据,是专为离线和大规模数据分析而设计的,并不适合那种对几个记录随机读写的在线事务处理模式。Hadoop=HDFS(文件系统,数据存储技术相关)+ Mapreduce(数据处理),Hadoop的数据来源可以是任何形式,在处理半结构化和非结构化数据上与关系型数据库相比有更好的性能,具有更灵活的处理能力,不管任
2017-12-12 23:19:53
1012
转载 @SessionAttributes(value="user")
http://blog.youkuaiyun.com/linuu/article/details/51037943
2017-11-20 19:14:55
773
原创 Java配置----JDK开发环境搭建及环境变量配置
(1)新建->变量名"JAVA_HOME",变量值"C:\Java\jdk1.8.0_05"(即JDK的安装路径) (2)编辑->变量名"Path",在原变量值的最后面加上“;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin” (3)新建->变量名“CLASSPATH”,变量值“.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAV
2017-11-07 22:44:44
201
原创 & 和 &&的区别和联系
(1)&:在C语言中表示对的是位运算符。 比如说 (&运算符两边操作的是数值型) int a=12;int b=23;int sum=a&b;System.out.println(sum); 其结果是:4.(是按照位运算的方法得出)。当&两边的操作是布尔型的时候,不存在逻辑短路Strin
2017-10-26 15:44:06
379
原创 servlet和jsp的区别与联系。
什么是servlet:(1) Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。 (2) 它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。什么是jsp:(1)JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它[1
2017-10-19 04:00:30
5741
转载 hibernate工作原理及作用
转载自 http://www.cnblogs.com/dashi/p/3597969.html#commentformhibernate 简介:hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库。hibernate核心接口session:负责被持久化对象CRUD操作ses
2017-10-18 16:43:51
340
原创 BufferedWrite和BufferedRead的用法。
普通用法(五中写入和两种读取):package cn.zll.demo;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class BufferWr
2017-09-21 12:54:52
1225
原创 BufferedInputStream和BufferOutputStream的用法。
BufferedInputStream:他是一个高效的缓冲区类,只提供一个缓冲区,不提供基本的字节流。`package cn.zll.demo; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IO
2017-09-20 22:31:09
2138
原创 FileInputStream和FileOutStream的标准代码
FileInputStream的用法: -FileInputStream in=null; try { byte [] b=new byte[1024]; in = new FileInputStream("a.txt"); int len=0; while(( len=in.read(b))!=-1){
2017-09-20 19:27:12
526
ssh框架下一对多的级联保存出现空指针异常。
2017-10-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人