JAVA
文章平均质量分 84
qyhua
专业软件开发。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
微服务架构设计与服务器部署方案《广东省某充电桩平台架构》
摘要: 广东省某充电桩平台采用微服务架构,支撑十万级设备接入,核心需求包括高并发、毫秒级响应及多品牌协议适配。系统分为五层:前置接入层(Netty实现TCP/WebSocket长连接)、消息队列层(RabbitMQ多租户隔离)、协议处理层(异步业务逻辑)、应用服务层(运营/API)及存储层(MySQL+Redis)。关键设计包括: 高性能闭环链路:设备→前置服务→MQ→协议处理→回写设备,确保实时控制; 解耦与隔离:前置服务仅处理报文收发,协议解析与DB操作异步化,多品牌通过独立Virtual Host隔离原创 2025-12-05 11:22:48 · 1064 阅读 · 0 评论 -
深入理解Ribbon的架构原理
Ribbon是Netflix开源的客户端负载均衡器,在Spring Cloud生态中扮演重要角色。本文深入剖析了Ribbon的架构设计和工作原理,包括其核心组件(IRule负载均衡策略、IPing健康检查、ServerList服务列表)、工作流程以及与Spring Cloud的集成方式。Ribbon通过将负载均衡逻辑放在客户端,减少了网络跳数,提供多种智能负载均衡策略,并与Eureka等服务发现组件深度集成,是构建高效微服务架构的关键组件。原创 2025-11-09 22:59:21 · 914 阅读 · 0 评论 -
深度解析:接口性能优化实战指南
接口性能优化实战指南摘要 本文系统阐述了接口性能优化的关键方法与实战策略。性能问题直接影响用户体验和商业价值,300ms延迟可导致转化率下降7%。核心优化指标包括响应时间(重点关注P99)、吞吐量和错误率。通过四步定位法:监控工具链搭建、梯度压力测试、火焰图代码剖析和依赖分析,精准识别瓶颈。实战优化策略涵盖:数据库优化(索引设计、批量操作)、多级缓存体系(本地+分布式缓存)和异步处理(消息队列解耦)。文章提供可视化数据、真实案例和工具对比,帮助开发者实现毫秒级性能提升,降低服务器成本30%以上。原创 2025-11-05 23:44:27 · 955 阅读 · 0 评论 -
八年半的坚守与热爱:一个“像孩子一样”的新能源汽车充电桩平台成长记
《八年半的坚守:一个新能源汽车充电桩平台的成长历程》 这篇技术回顾文章记述了作者8年5个月职业生涯中倾注心血的新能源汽车充电桩平台项目。从2017年广东XX云计算公司起步,平台历经从0到1的艰难孵化期,克服充电协议不规范、厂商技术断供等挑战。随着业务扩展,平台逐步支持数十个主流充电桩品牌,并成功对接小桔充电等第三方平台。在技术架构上,采用Spring Boot微服务和Netty高并发通信,通过RocketMQ实现解耦,形成了"TCP接入→协议解析→订单处理"的高效流水线。2021年项目转原创 2025-10-31 01:05:12 · 845 阅读 · 0 评论 -
Spring定时任务中数据未持久化的深度排查指南:从autoCommit到事务管理的终极解法
Spring定时任务中数据未持久化的排查指南:本文深入分析定时任务数据未写入数据库的典型问题,揭示事务管理失效、连接配置错误等关键原因。通过三步定位法(验证连接、测试插入、检查autoCommit)快速诊断问题,提供事务管理正确配置与失效补救方案,并给出数据库持久化配置的最佳实践,帮助开发者彻底解决"静默失败"难题。(149字)原创 2025-10-20 22:28:57 · 830 阅读 · 0 评论 -
一招解决 HikariCP “Communications link failure”:深入剖析连接池超时陷阱
本文深入剖析了HikariCP连接池常见的"Communications link failure"错误,指出其根源在于连接生命周期管理不当。文章首先分析了MySQL的wait_timeout机制和网络中间件的空闲连接超时特性,揭示了连接被"静默关闭"的真相。随后提出核心解决方案:合理配置maxLifetime参数,建议其值应小于数据库和网络设备超时阈值的70%,并辅以idleTimeout和keepaliveTime优化连接池行为。最后提供了Spring Boot中原创 2025-10-17 23:28:45 · 1101 阅读 · 0 评论 -
RabbitMQ 核心组件详解与持久化日志队列实现方案
本文详细解析了RabbitMQ的核心组件及其应用,重点介绍了虚拟主机、交换机和主题绑定的概念与操作。RabbitMQ通过虚拟主机实现逻辑隔离,支持多种交换机类型(Direct、Fanout、Topic、Headers)实现灵活的消息路由。文章推荐使用Topic交换机+持久化队列作为日志系统的最佳方案,并提供了基于Java 1.8+RabbitMQ+MySQL的日志持久化实现示例,包括环境准备、RabbitMQ资源配置和Java生产者代码。文中还对比了不同方案的适用场景,强调了RabbitMQ管理界面的监控能原创 2025-09-24 08:49:36 · 1287 阅读 · 0 评论 -
欧洲版OCPP 1.6充电桩项目开发与调试指南
欧洲OCPP 1.6充电桩项目开发指南 本文介绍了基于开源项目ocpp_charge的充电桩开发方案,该项目完全自主实现OCPP 1.6协议栈,无需依赖第三方库,适合协议学习和定制开发。项目特点包括: 纯Java实现,内置WebSocket服务端 提供Web控制台和实时日志展示 支持启动/停止充电、实时数据推送等核心功能 采用模块化设计,便于二次开发 项目包含WebSocket服务端、消息处理器等核心模块,开发者可快速搭建测试环境,通过Web界面模拟充电桩操作,并查看详细的协议交互日志。该方案特别适合需要对原创 2025-09-21 15:17:08 · 866 阅读 · 0 评论 -
使用Spring Boot对接欧州OCPP1.6充电桩:解决WebSocket连接自动断开问题
摘要:本文针对Spring Boot对接OCPP1.6充电桩时出现的WebSocket连接自动断开问题进行分析。发现Spring WebSocket握手处理存在限制,其响应格式(如状态码文本缺失、头部顺序不可控)不符合充电桩设备要求,导致连接建立后立即断开。建议采用Java-WebSocket独立服务器方案,可完全控制握手响应格式,实现稳定连接。文章提供了具体实现代码、抓包分析方法和解决方案对比表,帮助开发者快速解决协议兼容性问题。原创 2025-08-12 23:11:57 · 1189 阅读 · 0 评论 -
Spring Boot + Vue 整合部署终极指南:从 Nginx 到单 JAR 部署,解决 401、刷新跳转、中文乱码等所有坑
本文详细介绍了将Spring Boot+Vue项目从Nginx分离部署升级为单JAR内嵌部署的完整方案。通过将Vue打包后的dist文件放入Spring Boot的static目录,实现前后端同源部署,解决了跨域问题。文章重点讲解了Vue配置修改、Spring Boot静态资源整合、支持Vue history模式的路由配置,并针对401错误、刷新跳转、中文乱码等常见问题提供了解决方案。同时给出了Windows环境下的启动脚本优化建议,最终实现单文件交付、简化部署流程的目标。该方案特别适合不想使用Nginx的原创 2025-08-07 18:01:52 · 1121 阅读 · 0 评论 -
【踩坑实录】RabbitMQ 高并发异常“爆仓”事故还原与配置优化实战指南
RabbitMQ高并发场景下因默认配置导致"爆仓"事故分析与优化方案:当磁盘空间低于默认50MB阈值时,RabbitMQ会自动阻塞所有生产者,引发连锁故障。解决方案包括:1) 修改disk_free_limit配置至1GB以上;2) 批量设置队列TTL(30天)和最大长度(500万条);3) 提供遍历所有vhost应用策略的脚本。通过优化磁盘阈值和队列策略,可有效避免因单个队列堆积影响整体系统运行。文章详细演示了配置修改、验证和批量策略设置方法,适用于高并发设备数据接入场景。原创 2025-07-08 17:28:32 · 1347 阅读 · 0 评论 -
Sentinel实战教程:流量控制与Spring Boot集成
Sentinel控制台的规则配置方法。Spring Boot 2.1与2.5版本的集成技巧。实战中常见的配置与问题排查方案。掌握Sentinel不仅能提升系统稳定性,还能在高并发场景下从容应对流量洪峰!原创 2025-04-15 22:51:38 · 1363 阅读 · 0 评论 -
充电桩设备升级扩展多段计费
某省某市的一个充电桩项目近日收到业主需求,需在国庆节增加一个时间段(深谷计费段),但充电桩设备仅支持4段(尖时段,峰时段,平时段,谷时段),今天已是23号下周就是国庆了任务时间紧,如果改充电桩设备并不能保证可以按时交付完成,原因:硬件升级开发不好评估:开发,与平台调试对接,测试,还要升级每台桩…最后决定使用软件扩展实现,下面我们详细介绍。原创 2024-09-24 18:40:15 · 1143 阅读 · 1 评论 -
java.io.IOException: Too many open files 分析与解决
当前项目是用来接收充电桩报文的前置服务器,每台充电桩占用一个TCP连接,即1个连接也就是1个文件描述符,项目上线已有几个月,随着业务的增加,充电桩的数量也相应增加,当前的充电桩从原有的100多台慢慢增加到一千多台,也就是说单单连接就占用1000多个文件描述符,加上就用本身的一些如进程通信定时器,文件日记等等的文件描述符,也就超过1024,所以产生了些错误。在修复后,为了明确应用占用了多少文件符,我们再次查看该应用发现有1627个文件描述符。在 Linux 中,每个进程可以打开的文件描述符的数量是有限制的。原创 2024-09-13 13:22:20 · 2964 阅读 · 0 评论 -
mvn常见报错:Failed to read artifact descriptor for 解决
可能存在本地Maven仓库中的工件或元数据损坏。尝试手动从本地仓库中删除相关工件。如果问题仍然存在,请考虑使用另一个可能包含所需依赖项的Maven仓库。中指定的仓库是可访问的,并且包含所需的依赖。有时,问题可能是由于临时网络问题引起的。确保您的互联网连接稳定,并再次尝试Maven构建。如果问题与过时或缺失的元数据有关,这可能会解决问题。中错误消息中提到的工件的依赖坐标。如果是多模块项目检测子模块或父模块是否已安装,通常需先安装父模块。项目打包时所需的依赖包不存在本地仓库,或本地仓库文件存在问题。原创 2024-02-06 22:57:30 · 8147 阅读 · 0 评论 -
JAVA 使用try捕获异常处理
块是 Java 中异常处理机制的核心部分,允许开发者捕获和处理运行时的异常,避免程序在遇到异常时直接崩溃。try块通常与catch和finally块一起使用,用来捕获异常并确保资源得到正确处理。原创 2024-02-06 23:07:53 · 587 阅读 · 0 评论 -
如何避免缓存雪崩发生?
服务器缓存雪崩指的是中的大量缓存数据在短时间内同时过期或失效,导致大量请求直接打到后端数据库或其他数据源,瞬间增加数据库负载,从而可能引发系统性能下降或宕机的现象。缓存雪崩通常是大规模缓存同时失效的结果,或者是因为缓存系统出现了故障或被攻击导致无法正常工作。通常的服务部分图正常情况如下图:如上图:正常情况大量的请求都走高速缓存查询这步,只有缓存不存在才会请求数据库,请求数据库的同时也会把数据加载到缓存。原创 2024-02-05 22:34:30 · 1038 阅读 · 0 评论 -
TCP协议传输中的粘包和拆包
在网络通信中,TCP协议是最常用的传输层协议之一。然而,在使用TCP协议进行开发时,开发人员经常会遇到粘包和拆包的问题。这两个问题不仅常见,而且与数据的发送和接收方式密切相关。本文将详细探讨TCP协议中的粘包和拆包现象,以及它们产生的原因和可能的解决方案。原创 2024-01-02 16:13:21 · 862 阅读 · 0 评论 -
报表的设计思路
在任何项目中,数据都扮演着至关重要的角色。而报表则是呈现和分析这些数据的关键工具。一个设计良好的报表不仅能够清晰地展示信息,还能为决策提供有力支持。因此,掌握报表设计的艺术对于数据分析师和项目管理者来说都是不可或缺的技能。原创 2023-12-23 12:23:32 · 1017 阅读 · 0 评论 -
上位机编程:CP56Time2a格式精讲
总的来说,Cp56Time2a格式使用了12个字节来表示完整的日期和时间信息,包括秒、毫秒、日、月、以及年份。原创 2024-01-20 07:00:00 · 3841 阅读 · 0 评论 -
相关8小时(时区问题)汇总
开发测试的时候项目的时间都是正常的,上线了就可能会发现:前端时间、后端时间、MySql数据库时间查询出来相差 8 小时,11小时,13小时等,这通常是因为环境引起的,,上线时都使用云服务器,而云服务器许多系统默认使用 UTC 时间,而不是本地时区。如果没有正确地转换时间,就会(尤其是在中国,UTC 和中国标准时间(CST)有 8 小时时差)。原创 2023-12-13 17:18:56 · 848 阅读 · 1 评论 -
一个开源好用的java验证码框架
提供的验证码工具是一个轻量级的 Java 库,常用于生成图形验证码。这个库基于 Kaptcha 开发,旨在为开发者提供更加简便、灵活的验证码生成与集成方法,主要用于 Java Web 应用中。原创 2023-12-26 16:04:44 · 2501 阅读 · 0 评论 -
RabbitMQ 安装,配置,java接入使用(详细教程)
RabbitMQ 最新版 安装,配置,java接入使用(详细教程)原创 2024-08-22 23:58:05 · 11469 阅读 · 1 评论 -
springboot2 配置连接多个 redis
springboot2 配置连接多个 redis的两种方案原创 2023-12-05 09:47:06 · 2550 阅读 · 0 评论 -
【云快充协议】计费规则时间分割48个段
原始协议文档: 代码实现时间切割,(每半小时为一个费率段,共 48 段)代码说明:主要功能是处理业务时间,它根据云快充的充电协议计费规则 ,将一天的时间分为48个时间段,并为每个时间段分配一个类型。以下是代码的详细解释:方法 1:方法 2:方法 3:方法 4:方法 5:原创 2023-12-01 14:56:26 · 2032 阅读 · 6 评论 -
分布式环境防止重复提交请求(Redisson分布式锁)
在分布式系统中,防止重复请求是一个常见的问题,尤其是在高并发场景下。Redisson是 Redis 的一个 Java 客户端,它可以有效利用 Redis 的分布式锁来防止重复请求。以下是使用 Redisson 防止重复请求的基本思路和实现方式。原创 2023-12-05 11:19:39 · 1054 阅读 · 0 评论 -
关于java开发BigDecimal类的一些应用经验分享
BigDecimal是处理高精度计算的核心类,正确的创建、运算、舍入和比较方法非常重要。对于需要确保精度的业务场景,合理使用BigDecimal能够有效避免计算错误。原创 2023-05-23 10:22:51 · 2910 阅读 · 1 评论 -
JAVA线程池的线程数量配置
线程池的数量设计多少,应结合代码与所运行环境情况配置其运行数量。原创 2024-05-25 12:16:36 · 790 阅读 · 0 评论 -
解决:java.util.concurrent.RejectedExecutionException
当前这个系统这个线程池的线程是用来处理传的是状态,大概有2千个设备,高峰期这2千个设备同时或不断发送状态信息过来,很多状态信息是重复的而且变化时间一般十几分钟,大多数信息基本是同样的状态可以忽略不处理,所以这个错误在这种业务环境下是不影响业务,也可以忽略不调整的。像这种 RejectedExecutionException 错误,表明在Java应用程序中,一个任务尝试提交到线程池()去执行时被拒绝了,具体原因是线程池达到了其配置的容量限制,无法接纳更多的任务。原创 2024-05-27 17:11:49 · 1862 阅读 · 0 评论 -
JAVA在Spring框架多线程时调用服务类方法
我们在开发Web的项目时,有时候我们想在线程的环境下使用@Service或@Component 注解的服务类方法,多线程下是不能直接调用,以下总结一些常用的技巧转换成可调用的形式。。原创 2024-05-23 11:46:00 · 695 阅读 · 0 评论 -
Springboot 前端传参后台接收当不存在参数bean对象时报错解决
通过配置后,有不存在的参数也不会报400错误,这样前后端开发方便多了,前端不需删除不存在的参数就提交可节约大量的时间。原创 2024-06-24 18:10:01 · 725 阅读 · 0 评论 -
前端vue后端java使用easyexcel框架下载表格xls数据工具类
一 使用alibaba开源的 easyexcel框架,后台只需一个工具类即可实现下载。原创 2024-07-06 16:08:56 · 619 阅读 · 0 评论 -
前端post提交一次会有两次请求?
总结来说,浏览器会为了安全性,在跨域请求时先发出预检请求,确保目标服务器允许跨域访问,然后才进行实际的POST请求。这就是为什么会有两次请求,一次是。浏览器自动发起的options请求,不可以直接控制,但可以通过服务端配置的方式向浏览器缓存允许直接请求,只需配置适当的。这里是执行了两次post提交,每个post都有两次(一次是。前端post只提交一次会有两次请求?跨域资源共享(CORS)策略有关,每一次类型。配置后测试再也没有发现。preflight是。原创 2024-07-20 17:49:02 · 818 阅读 · 0 评论 -
海康充电桩报文校验TCP校验和
海康充电桩报文校验TCP校验和,用 java 实现原创 2024-06-14 12:17:39 · 679 阅读 · 0 评论 -
poi导出This archive contains unclosed entries错误解决
poi导出This archive contains unclosed entries错误解决,这行代码response.reset();会把使用框架全局配置cros清除,也就是说这个请求回复不再支持cors,如果你用vue前后端分离的,如果页面域名与后台api服务域名不同,此时浏览器接收到这个会报cors错误,既终止正在请求处理的后端连接,很多人看到前面的错误而忽略了后面的,Broken pipe。解决了cors,此时浏览器与后台通讯正常,即恢复下载正常。原创 2024-08-06 18:10:40 · 2208 阅读 · 0 评论 -
SpringBoot 后端接收参数优化(统一处理前端参数)
后台使用 SpringBoot+ MyBatisPlus 框架,前端是vue开发,正常开发情况下,前端vue调用接口时如果写多参数或写错参数提交后后都会报错,特别是前端做修改的时候:例如,要修改某行通常所要修改列表的那行整行Row内空复制为一个对象entity 到 表单回显,用户修改后直接把整个entity直接丢给后端,由于entity是从列表的row复制过来了,会带有vue框架table的一些参数,如index如果后台没有就会报错,此时要排查不存在的参数。原创 2024-07-23 12:21:29 · 762 阅读 · 0 评论 -
Token 设计
Token设计,Token 的有效期,很多大厂有关Token 的设计的有效期像都被设置 2 小时。有效期的计算实际就是指从调用接口获取 Token 的时间开始算,而不是指服务器每 2 小时统一更新一次 Token原创 2024-08-18 16:52:32 · 1823 阅读 · 0 评论 -
Linux 下 RocketMQ 安装、配置与运维(详细讲解)
Linux 下 RocketMQ 安装、配置与运维 如果是内网IP外网是无法访问的,需要配置外网IP,云服务器如果使用默认配置一般是内网IP。broket 启动时默认启动脚本内存参数是使用8G内存。要更改 RocketMQ 的本地部署中的端口,您需要修改 RocketMQ 的配置文件。从上图中可以看到send_ok,说明生产端已正常发送信息到队列。从上面看,本地生产发送与接收数据正常,基本可以判断本地安装正常。执行后看到创建了个后台进程,但此时并无法看到日记。安装过程非常简单,解压。原创 2024-08-18 00:40:37 · 4047 阅读 · 0 评论 -
后台因http请求的一个参数引起java内存溢出。
增大 JVM 堆内存是最直接的解决方案,但这通常只是缓解问题的第一步。分析并优化代码才是长期解决方案。通过内存分析工具找到内存泄漏或优化内存占用,可以有效预防类似问题。优化垃圾回收则是确保在高内存压力下应用仍能稳定运行的重要手段。通过上述步骤,你应该能够找出并解决错误的根本原因。原创 2024-08-16 23:29:47 · 927 阅读 · 0 评论 -
使用HttpClient请求时报PKIX错误,配置忽略https证书请求
发现有些https的请求报错,如下图:javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 这个错原创 2024-08-15 17:02:09 · 1233 阅读 · 0 评论
分享