- 博客(36)
- 收藏
- 关注
原创 Xxl-Job:关于任务积压时被kill后导致客户端回调请求超时、不断重复重试请求导致服务端DB查询QPS变高的问题
3、排查客户端任务被kill的逻辑,发现任务被kill后,有一个逻辑会将任务请求积压队列中的所有项都遍历出来放入到回调队列中,回调线程每次都直接取出队列中的所有数据来发送到管理端。这样就会导致回调请求处理时间过长,导致http请求超时,请求失败后然后将body体写入本地文件,然后重试线程定期将失败的body进行重试,周而复始。4、联系业务将任务所在进程机器中的callback路径下的文件删除后,问题解决,DB的QPS恢复到正常水平。查询里面的logId情况,有些存在数据库,有些不存在。
2024-11-28 11:43:26
198
1
原创 一文讲清多线程和多线程同步
一个进程内多个线程并发执行的情况就叫多线程,每个线程是一个独立的执行流,多线程是一种编程模型,它与处理器无关、跟设计有关。并行计算:充分利用多核,提升整体吞吐,加快执行速度。后台任务处理:将后台线程和主线程分离,在特定场景它是不可或缺的,如:响应式用户界面、实时系统等。我们用2个例子作说明。
2024-11-06 16:18:58
747
原创 一次Mysql数据库活跃连接数高告警的排查方法
在现代应用中,数据库的性能和稳定性直接影响到整个系统的运行情况。活跃连接数高的告警往往意味着数据库负载过重,可能会导致性能下降甚至服务不可用。
2024-10-05 23:37:41
464
原创 Java Web服务运行一段时间后出现cpu升高导致的性能下降问题排查
有个web服务,运行一段时间后,出现cpu逐渐占用高,服务处理请求整体性能下降问题。异常情况时,同时jvm的cpu上涨最终表现为,处理内部逻辑执行耗时变高。
2024-09-18 12:20:41
464
原创 SpringBoot 处理 @KafkaListener 消息
spring为了将kafka融入其生态,方便在spring大环境下使用kafka,开发了spring-kafa这一模块,本质上是为了帮助开发者更好的以spring的方式使用kafka@KafkaListener就是这么一个工具,在同一个项目中既可以有单条的消息处理,也可以配置多条的消息处理,稍微改变下配置即可实现,很是方便当然,@KafkaListener单条或者多条消息处理仍然是spring自行封装处理,与kafka-client客户端的拉取机制无关;
2024-09-14 11:42:20
2525
1
原创 Proxyless Service Mesh:下一代微服务架构体系
在当今的中,应用程序通常被拆分成多个独立的服务,这些服务通过网络进行通信。最初,开发者使用SDK来解决这些问题,通过在代码中集成各种库和工具来实现服务治理。为了解决这些问题,(Service Mesh)应运而生。服务网格通过在服务间引入一个代理层(通常称为Sidecar),将服务治理的逻辑从应用代码中分离出来,实现了更好的治理和管理。然而,服务网格的引入也带来了额外的复杂性和性能开销。在这样的背景下,我们通过Java,在服务治理领域提供了一种创新的解决方案。
2024-09-12 14:49:41
675
原创 Mybatis TypeHandler 介绍及使用
TypeHandler类型转换器是负责Java类和jdbc类型之间的转换。主要涉及到下面这几个类:TypeHandler 类型转换器的顶层接口BaseTypeHandler 抽象类继承自TypeHandler,Mybatis中所有的类型转换器实现均继承他。TypeHandlerRegistry 类型转换器注册器,负责存储类型转换器。TypeAliasRegistry 类型别名转换器,用来存储类型与别名的对应关系。
2024-08-08 23:20:59
573
原创 基于Mybatis插件机制,实现SQL打印到日志
如果项目希望在执行mysql操作时能够打印SQL日志,可以基于mybatis提供的插件机制来实现。
2024-07-30 20:41:18
385
原创 mybatisplus实现公共字段自动填充功能
这些字段通常会容易被大家忽视,每个 Entity 都去处理一遍比较麻烦耗时;如果忽略又会造成记录本身属性不完整,直到用到的时候才后悔莫及。类中,所以在这个类中,我们把所有更新和插入时需要做改动的字段都加上。(创建时间) 等字段,与业务基本无关且属于记录本身的属性字段。中的 MetaObjectHandler。一般来说,这些公共字段我们都会封装在一个。就是针对这一问题的良好解决方案。)中经常会有一些公共字段如。在日常的开发过程中,
2024-07-20 16:30:16
423
原创 Maven:一个下载jar依赖失败的问题解决方案
如果写了parent的话,那在deploy的时候也要将parent上传到私服上去,在下载的时候会先下载parent依赖的模块,然后再下载依赖的jar包。解决方案:在将我们的jar包发布到私服的时候,如果jar包有parent或者其他依赖的时候,要从root上deploy,避免缺少依赖,导致下载失败。从该错误信息中可以看到,找不到服务名是xxl-job这个的,我们要找的jar包服务名是xxl-job-core,甚是疑惑。经过排查,发现我们的jar包其实是多模块项目,里面的pom文件的parent属性写了。
2024-06-13 10:18:30
633
原创 Apache Pulsar 从入门到精通
具有非常灵活的消息模型和直观的客户端 API。分布式发布-订阅消息平台。多租户、认证、授权、配额。Pulsar 是一个。
2024-06-10 22:01:00
1111
原创 SpringBoot 基于jedis实现Codis高可用访问
codis作为开源产品,可以很直观的展示出codis运维成本低,扩容平滑最核心的优势.其中,开源的codisproxy的服务的注册发现是通过zk来实现。Codis集群的整体架构和关键组件如下所示,其中心思想是。基于多个redis实例做了一层路由层来进行数据的路由。codis与redis之间关系就是codis是。,每个redis实例承担一定的数据分片。
2024-05-31 17:12:41
379
1
原创 整合 Prometheus & Grafana 监控
Prometheus 通过指标名称(metrics name)以及对应的一组标签(labelset)唯一定义一条时间序列。指标名称反映了监控样本的基本标识,而 label 则在这个基本特征上为采集到的数据提供了多种特征维度。用户可以基于这些特征维度过滤,聚合,统计从而产生新的计算后的一条时间序列。PromQL 是 Prometheus 内置的数据查询语言,其提供对时间序列数据丰富的查询,聚合以及逻辑运算能力的支持。并且被广泛应用在Prometheus的日常应用当中,包括对数据查询、可视化、告警处理当中。
2024-05-20 19:20:57
1046
1
原创 Jackson 配置与扩展
为什么会说 Jackson 在 Spring Boot 生态中很重要?Jackson 是 Spring Boot 生态中核心的 JSON 处理组件,贯穿于 Spring Boot 生态包括 Spring Cloud 的各个组件中。 正因为日常可见,往往就越不重视。而实际开发中,初次使用 Spring Boot 生态组件,遇到的很多问题往往就出自 Jackson。 Spring Boot 生态中 Jackson 的使用和设计,采用了 Spring Boot 生态中非常常用的一种我称之为 Cust
2024-05-16 10:33:34
670
1
原创 使用WebMvcConfigurer配置SpringMVC
配置类是使用Java代码代替传统的xml配置文件,对SpirngMvc进行配置的一种方式,需要创建一个并推荐。
2024-05-15 17:36:01
2330
1
原创 应用服务集成 Prometheus有哪些优势
结合 Prometheus 和 Grafana 实现统计指标可视化。是由 SoundCloud 开源的监控告警解决方案,支持多维数据模型、灵活的查询语言、强大的告警管理等特性。
2024-05-13 20:33:54
223
1
原创 布隆过滤器使用小结
布隆过滤器(英语:Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。主要用于判断一个元素是否在一个集合中。通常我们会遇到很多要判断一个元素是否在某个集合中的业务场景,一般想到的是将集合中所有元素保存起来,然后通过比较确定。链表、树、散列表(又叫哈希表,Hash table)等等数据结构都是这种思路。但是随着集合中元素的增加,我们需要的存储空间也会呈现线性增长,最终达到瓶颈。
2024-05-13 11:26:50
1069
1
原创 微服务体系治理解决方案
值得注意的是,⽆论是 SDK 的形态,还是 Agent 的形态,还是 sidecar 的形态,对于服务治理的控制台来说,都需要统⼀的控制面对多种数据⾯进⾏控制。通过java agent方式进行微服务治理中间件作为提供⽅,苦于业务⽅不能及时升级中间件到最新版。业务⽅作为使⽤⽅,苦于升级成本⽐较⾼。Java Agent 技术,能够在运⾏时动态修改 Java 字节码,动态的改变 Java 程序的⾏为,能够很好的满⾜这种需求。
2024-02-28 18:37:33
1421
1
原创 SpringBoot结合prometheus自定义埋点实践
一般,我们叫这样的操作为”埋点”。Counter的作用是记录XXX的总量或者计数值,适用于一些增长类型的统计,例如下单、支付次数、Http请求总量记录等等,通过Tag可以区分不同的场景,对于下单,可以使用不同的Tag标记不同的业务来源或者是按日期划分,对于Http请求总量记录,可以使用Tag区分不同的URL。Micrometer中使用英文逗号分隔单词的命名规则,再通过底层的命名转换接口NamingConvention进行转换,最终可以适配不同的监控系统,同时可以消除监控系统不允许的特殊字符的名称和标记等。
2024-02-26 19:48:29
4930
1
原创 CommunicationsException: Communications link failure解决方案
出现的原因是:执行过程中出现了慢SQL,执行SQL时间超过了启动参数中配置的socket读写超时时间了。可以调大 socketTimeout=5000 来解决。
2024-02-22 15:48:23
691
1
原创 Grpc入门使用
Stubby Google内部的RPC,演化而来的,2015正式开源。云原生时代是一个RPC标准。A. 网络通信 ---> gRPC自己封装网络通信的部分 提供多种语言的 网络通信的封装 (C Java[Netty] GO)B. 协议 --->HTTP2 传输数据的时候 二进制数据内容。支持双向流(双工)连接的多路复用。C. 序列化 ---> 基本文本 JSON 基于二进制 Java原生序列化方式 Thrift二进制的序列化 压缩二级制序列化。
2024-02-01 16:48:49
1182
1
原创 xxl-job源码解析
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
2024-01-24 14:55:27
841
1
原创 微服务可观测性组件选型
另外,说到 APM 或系统监控,就不得不提 Prometheus+Grafana 这对组合,它们对机器健康情况、URL 访问统计、QPS、P90、P99 等等这些需求,支持得非常好,它们用来做监控大屏是非常合适的,但是通常不能帮助我们排查问题,它看到的是系统压力高了、系统不行了,但不能一下子看出来为啥高了、为啥不行了。而 Traces 系统就离业务更远一些了,它关注的是一个请求进来以后,经过了哪些应用、哪些方法,分别在各个节点耗费了多少时间,在哪个地方抛出的异常等,用来快速定位问题。是使用这个规范的,而。
2024-01-15 14:44:24
404
原创 一份可以用于生产环境的Spring Boot日志配置文件
其中collect-file-appender.xml文件内容为。其中console-appender.xml文件内容为。在springboot项目的resources下放置。其中MyLogPathDefiner文件内容为。其中base.xml文件内容为。
2023-12-20 17:44:36
408
1
原创 SpringBoot jar包内容结构分析小结
解压后,像是上面这种文件结构,才是正确的springboot启动包,如果不是,可能是没有配置springboot的maven打包插件;有时候定位一些问题可能需要从jar包里分析,比如是否正确生成了springboot的启动包,二/三方库依赖版本号是否符合预期等。: 这些是其他应用程序可能包含的文件和目录,例如静态资源文件、配置文件、日志文件等。: 这个目录包含了 Spring Boot 应用程序的运行时内容。: 这个目录包含了应用程序的依赖库和类文件。: 这个目录包含了 JAR 文件的元信息。
2023-12-18 19:43:35
618
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人