- 博客(55)
- 资源 (17)
- 问答 (1)
- 收藏
- 关注
原创 Spring Cloud Gateway源码
默认情况下,Spring Cloud Gateway 会根据服务注册中心(例如 Eureka Server)中维护的服务列表,以服务名(spring.application.name)作为路径创建动态路由进行转发,从而实现动态路由功能。使用Spring cloud开发微服务系统,一般采用的架构如下所示,Gateway不仅作为请求转发的入口,还会进行权限验证、监控、缓存、请求路由、流量限制、请求熔断、请求重试等功能。lb:uri 的协议,表示开启 Spring Cloud Gateway 的负载均衡功能。
2023-02-06 18:37:45
1382
原创 Eureka Server源码解析
下图是官网提供的一个Region下,三个Zone(us-east-1c、us-east-1d、us-east-1e)Eureka的架构图。Eureka的架构,主要分为Eureka Server 和 Eureka Client两部分,Eureka Client 又分为Application Service和Application Client,Application Service就是服务提供者,Application Client就是服务消费者。ResponseCacheImpl构造函数。
2023-01-29 23:24:45
635
原创 FeignClient中LoadBalancer源码解析
FeignBlockingLoadBalancerClient#excute是LB的核心代码逻辑,主要包括三个方面,一个是LB的生命周期管理,一个是灰度策略;一个负载均衡选择后端服务实例。条件加载的逻辑在FeignLoadBalancerAutoConfiguration 中,默认是DefaultFeignLoadBalancerConfiguration。实际上FeignClient中LoadBalancer与LoadBalancer差不多,也是处理灰度策略、负载均衡策略,最后执行http请求。
2023-01-22 20:37:57
635
原创 LoadBalancer源码解析
此外,负载均衡还和ServiceInstanceListSupplier#get方法有关,灰度策略就是在HintBasedServiceInstanceListSupplier重新实现了get方法,实现了灰度调度功能,源码分析以HintBasedServiceInstanceListSupplier为例进行分析。LB拦截器里面实现了intercept方法,将LB负载均衡逻辑的需要的参数装填好,调用LoadBancerClient的execute方法。最后就是进行http请求。
2023-01-22 20:08:07
1383
原创 FeignClient调用源码解析
FeignCLient整体流程如下图所示,在应用添加注解@EnableFeignClients时,就在FeignClientsRegistrar中通过FactoryBean将应用中的FeignClient实例化到Spring容器中,并实现各个方法,最终根据实际配置使用配置的Client进行http请求,反序列化。除了可以在应用程序中,对Feign进行配置外,在spring-cloud-starter-openfeign中,也有一些必要的条件配置在starter中通过条件进行注册。
2023-01-15 14:43:32
1378
原创 Spring RestTemplate请求过程
目前Spring RestTemplate是常用的http请求工具类,本文简单Spring RestTemplate的请求过程。
2022-12-09 00:31:12
696
原创 jvm参数造成http请求Read time out
线上部署的代码,部署在测试环境突然抛出接口请求Read time out的异常。查看线上日志,接口请求正常。重新启动,部署测试环境代码都没有效果,接口还是必现Read time out。直接在测试环境服务器上执行使用curl命令执行http请求,接口正常返回,所以排查网络,第三方服务的原因。解决这类问题,最简单的方法就是抓一个正常的http请求包,抓一个Read time out异常的http请求包,对比两个的报文。但是事与愿违,容器环境禁用tcpdump命令,也就抓不了包。启动本地代码连接测试环境配置
2022-12-06 00:59:49
2544
原创 Redis序列化Jackson2JsonRedisSerializer坑
项目上使用Jackson2JsonRedisSerializer 给value做序列化。近期由于在进行项目重构,调整了包的组织结构,导致存在载redis对象class路径发生变化。在发布后,读取redis里面数据解析失败。
2022-11-23 21:30:16
1187
原创 ElementVue MessageBox内容过长显示问题
项目上,有个提示信息,需要提示条目编码,条目数量最多可以达到50个,所以极限异常情况,需要考虑50个条目都异常的情况下,怎么提示的问题?
2022-11-07 08:45:04
2124
原创 Java开发常见错误
具体shardingsphere如上图所示,根据配置的脱敏规则,在执行insert、update的时候,将逻辑列和逻辑列的值,转换成密文列和密文值,进行存储。反之,在执行select语句的时候,则找到对应的密文列,将密文值解密赋值给逻辑列。软件架构采用SpringBoot + MyBatis + Mysql的方式,insert 语句是自动生成的,PO也是通过数据库表自动解析的。发现有几个字段,如source是mysql的关键字,所以猜测是这个问题,于是加上··即可正常运行。
2022-10-12 23:11:12
256
原创 Zookeeper重要概念
zookeeper将所有的数据存储在内存中,数据模型是一棵树,有/进行分割的路径,就是一个数据节点Znode。Zookeeper允许用户在指定节点上注册一些Watcher,并且在一些特定事件触发的时候,Zookeeper服务端会将事件通知到感兴趣的客户端上。数据节点分为持久节点、临时节点,顺序节点,组合起来一共是4类:持久性普通节点、持久性顺序节点、临时性普通节点、临时性顺序节点。只要在sessionTimeout 时间内,连上任意一个实例,session都有效。..................
2022-08-13 11:58:10
755
原创 Zookeeper基础
随着用户规模的增加,数字化内容的增加,分布式应用基本上已经是项目的标配。分布式应用中,由于通信异常、网络分区、节点故障等因素,要实现数据的一致性很难,目前业界解决一致性问题采用的是Paxos算法,但是这个算法实现相对困难。但是开源的Zookeeper,就是针对大型分布式系统的高可用、高性能且具有一致性的开源协调服务,目前在业界被广泛采用,如:Kafka、HBase、Solr、Flink等。.........
2022-08-11 00:26:58
434
原创 easy-rule 初窥
最近,公司有个项目,需要根据不同的规则来检验是否满足条件,由于条件可以配置,所以需要在开发的时候考虑条件的可拓展性,不能因为新增了规则,就需要修改规则,所以决定在使用规则引擎来处理条件校验。Easy Rules是一个简单而强大的Java规则引擎,具有轻量级框架和易于学习的API,基于POJO的开发与注解的编程模型,定义抽象的业务规则并轻松应用它们,支持从简单规则创建组合规则的能力,支持使用表达式语言(如MVEL和SpEL)定义规则的能力。......
2022-06-18 15:04:12
765
原创 mybatis动态SQL问题
项目场景:最近公司有个数据库敏感字段加密改造的项目,需要将敏感字段加上统一后缀(_enc),使用的是shardingshere数据加密的功能来将代码的字段,映射到数据库字段。通过修改数据库表和应用的shardingshere的数据规则映射配置就行。但是自测的过程中,历史代码在update 某条数据记录的时候,直接更新了整个库,特此记录一下这个问题。问题描述业务有个根据手机号更新A表记录的接口,但是自测的时候,直接更新了整个表,shardingshere的logicSQL和Actual SQL如下所示:
2022-05-29 14:58:25
403
原创 MySQL索引注意事项
系列文章目录第一章:sql_mode模式第二章:optimize table、analyze table、alter table、gh-ost第三章:InnoDB MVCC原理第四章:sql语句执行过程第五章:Percona Toolkit工具简介第六章:MySQL索引第七章:MySQL的锁第八章:MySQL加锁分析第九章:MySQL线上问题处理事项第十章:MySQL索引注意事项文章目录系列文章目录总结总结MySQL中给varchar和text字段建立普通索引时,最好指定索引长
2022-04-10 20:26:19
342
原创 MySQL线上问题处理事项
系列文章目录第一章:sql_mode模式第二章:optimize table、analyze table、alter table、gh-ost第三章:InnoDB MVCC原理第四章:sql语句执行过程第五章:Percona Toolkit工具简介第六章:MySQL索引第七章:MySQL的锁第八章:MySQL加锁分析第九章:MySQL线上问题处理事项文章目录系列文章目录前言一、处理连接不工作的连接二、query_rewrite前言mysql线上问题处理的几个注意事项。一、处理连
2022-04-05 00:37:26
942
原创 MySQL加锁分析
系列文章目录第一章:sql_mode模式第二章:optimize table、analyze table、alter table、gh-ost第三章:InnoDB MVCC原理第四章:sql语句执行过程第五章:Percona Toolkit工具简介第六章:MySQL索引第七章:MySQL的锁第八章:MySQL加锁分析文章目录系列文章目录前言一、等值查询1.唯一索引1.1 查询存在的值1.1.1 场景1.1.2 结果1.2 查询不存在的值1.2.1 场景1.2.2 结果2.普通索引2.1
2022-04-05 00:17:29
1017
原创 MySQL的锁
系列文章目录第一章:sql_mode模式第二章:optimize table、analyze table、alter table、gh-ost第三章:InnoDB MVCC原理第四章:sql语句执行过程第五章:Percona Toolkit工具简介第六章:MySQL索引第七章:MySQL的锁文章目录系列文章目录一、MySQL锁的分类二、全局锁2.1 使用场景2.2 set global readonly=true三、表级别锁1.表锁2.MDL锁四、行锁4.1 两阶段锁协议4.2 死锁一
2022-03-29 23:51:59
767
原创 MySQL索引
系列文章目录第一章:sql_mode模式第二章:optimize table、analyze table、alter table、gh-ost第三章:InnoDB MVCC原理第四章:sql语句执行过程第五章:Percona Toolkit工具简介第六章:MySQL索引文章目录系列文章目录索引作为类似书籍目录,可以快速定位查找项的位置。MySQL的索引可以根据数据结构、物理存储、字段特性、字段个数进行分类,具体如下:注意点:索引下推:可以在索引遍历过程中,对索引中包含的字段先做判
2022-03-28 23:48:53
789
原创 Percona Toolkit工具简介
系列文章目录第一章:sql_mode模式第二章:optimize table、analyze table、alter table、gh-ost第三章:InnoDB MVCC原理第四章:sql语句执行过程第五章:Percona Toolkit工具简介文章目录系列文章目录一、Percona Toolkit简介二、安装使用三、常用命令1. pt-kill1.1 介绍1.2 常用参数1.3 示例2. pt-query-digest2.1 简介2.2 常用参数2.3 示例一、Percona Tool
2022-03-27 18:19:58
6567
原创 sql语句执行过程
系列文章目录第一章:sql_mode模式第二章:optimize table、analyze table、alter table、gh-ost第三章:InnoDB MVCC原理第四章:sql语句执行过程文章目录系列文章目录一、整体流程一、mysql-server1. 连接器2. 缓存3.分析器4.优化器5.执行器二、mysql-engine1.简介三、三大重要日志1.bin log2.undo log3.redo log一、整体流程update t set c = 1 where id =
2022-03-25 15:52:20
1972
原创 常见的设计原则
系列文章目录第一章 经典23种设计模式总结第二章 常见的设计原则第三章 重构文章目录系列文章目录前言一、SOLID1.单一职责原则2.开闭原则3.里式替换原则4.接口隔离5.迪米特法则二、其他1.KISS2.YAGNI3.DRY前言每个码农工作1-2年后,就不是仅仅完成导师或者领导安排的user story,还要考虑如何编写高质量的代码,确保的user story背后隐藏的非功能需求,即常说的代码的可维护性,可读性,可拓展性,灵活性,简洁性,可复用性,可测试性。我们可以通过设计思想,设计原则
2022-03-20 16:31:14
350
原创 经典23种设计模式总结
编写高质量代码系列文章目录第一章 经典23种设计模式总结第二章 设计原则第三章 重构经典23种设计模式总结编写高质量代码系列文章目录前言一、创建型1.单例模式2.工厂模式3.建造模式4.原型模式二、结构型1.代理模式2.桥接模式3.装饰器模式4.适配器模式5.门面模式6.组合模式7.享元模式三、行为型1.观察者模式2.模板模式3.策略模式4.职责链模式5.迭代器模式6.状态模式7.访问者模式8.备忘录模式9.命令模式10.解释器模式11.中介模式四、总结前言每个码农工作1-2年后,就不是仅仅
2022-03-20 16:08:45
422
原创 InnoDB MVCC原理
MySQL系列第一章:sql_mode模式第二章:optimize table、analyze table、alter table、gh-ost第三章:InnoDB MVCC原理文章目录MySQL系列一、隔离性与隔离级别二、MVCC原理1.行记录隐藏列2.MVCC 原理3.当前读一、隔离性与隔离级别在平时的开发工作中,经常使用MySQL InnoDB的事务特性ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性),隔
2022-03-07 00:20:24
693
原创 optimize table、analyze table、alter table、gh-ost
MySQL系列第一章:sql_mode模式第二章:optimize table、analyze table、alter table、gh-ost文章目录MySQL系列一、alter table二、analyze table三、optimize table四、gh-ost一、alter table从 MySQL 5.6 版本开始,alter table t engine = InnoDB(也就是 recreate)默认流程如下所示:建立一个临时文件,扫描表 A 主键的所有数据页;用数据页
2022-03-03 23:49:11
1240
原创 MySQL的sql_mode模式
MySQL系列第一章:sql_mode模式文章目录MySQL系列背景一、sql_mode模式二、sql_mode模式配置方式1:方式2:方式3:背景最近工作中,以前的功能突然不能正常工作,通过一通排查,发现是sql语句执行报错,具体错误信息如下,里面相关业务字段已经去掉。The error occurred while setting parameters### SQL: select id,xxx from table1 group by code order by create_time
2022-02-21 00:04:05
6946
原创 @Tranctional失效场景
spring系列文章@Tranctional失效场景文章目录spring系列文章一、使用1. 事务传播行为2. 事务隔离级别3.回滚规则二、失效场景1. @Tranctional应用在非public修饰的方法上2. @Tranctional注解属性propagation设置错误3. @Transactional注解属性rollbackFor设置错误4. 同一个类中方法调用,导致@Tranctional失效5. 异常被catch吞掉了导致@Tranctional失效6.数据库引擎不支持事务一、使
2022-02-20 18:16:39
610
原创 数据埋点方案及注意事项
文章目录背景一、整体方案二、注意点1.接口并发能力2.数据库连接数3.数据定时清除总结背景最近有个诉求,产品需要根据用户使用频次,使用时长,重新调整菜单的等级和顺序,因此需要对前端的一些事件进行埋点。一、整体方案整体方案采用后端提供接口,前端相关操作调用后端接口,服务端将埋点数据放在进程内队列,然后根据数据保存策略(定时+定量)产生任务。异步任务循环从队列取数据,达到一定额度,批量写入DB。最后通过Sqoop每天凌晨从mysql抽取数据放入到Hive中,在数据集市中,对Hive中的数据归纳分类展
2022-01-16 18:43:57
2771
原创 限制后端接口调用次数
系列文章目录第一章 AOP后端控制接口调用次数第二章 前后端配合控制接口调用次数文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的
2022-01-15 23:57:35
1093
原创 AOP技术限制后端接口调用次数
AOP技术限制后端接口调用次数背景一、整体方案二、AOP1.反射解析属性2.SpEL解析属性3.下载接口4.预览接口总结背景最近工作上在做安全管控的需求,需要限制一些接口的调用次数,一般可以采用两种方案,一种是将在后端使用AOP进行限制,另外一种是在后端开一个http接口,前端每次调用的时候,先调用安全管控的接口,接口返回成功的情况下,才进行实际业务操作。本文主要总结使用AOP限制次数踩的一些坑一、整体方案整体方案如上图所示,使用AOP技术,在原有的基础上,增加规则判断。二、AOP1.反射
2022-01-02 11:57:15
837
原创 GitLab回退到某次commit
1.查询需要回退的commit记录$ git log2.gitlab回退到某次commit$ git reset --hard commitID$ git reset commitID其他类似命令:$ git reset --hard HEAD^ 回退到上个版本$ git reset --hard HEAD~3 回退到前3次提交之前,以此类推,回退到n次提交之前3.强制重新提交到远程$ git push -f...
2021-11-26 23:53:15
1056
原创 Linux基础知识
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、帮助命令二、使用步骤1.引入库2.读入数据总结一、帮助命令二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsimport warningswarnings.filterwarnings('ignore')import sslssl._
2021-10-25 11:45:17
69
原创 SpringCloud自定义配置-PropertySourceLocator
文章目录背景一、PropertySourceLocator二、原理1、源码2.使用背景项目上需要在SpringCloud的基础上,拓展SpringCloud的配置文件,所以使用了PropertySourceLocator来拓展SpringCloud的配置文件。一、PropertySourceLocatorPropertySourceLocator接口主要是需要实现PropertySource<?> locate(Environment environment)接口即可,具体源码如下:.
2021-10-15 23:22:03
2953
原创 centos 定时重启服务
问题描述:临时接受一个项目,项目刚刚开始反应出现每天早上7:00 ~ 8:00 服务占用内存、CPU快满,重启之后服务正常。临时解决方案:由于公司环境不能复现线上问题,为了临时解决问题,决定每天临时重启服务,因此才有一下的定时重启服务的shell脚本。echo "00 1 * * * root systemctl restart xx.service &>/dev/null 2>&1" >> /etc/crontabexit 0...
2021-08-09 22:36:47
627
原创 SpringBoot 连接多个Rabbitmq数据源
SpringBoot 连接多个Rabbitmq数据源前言一、单个RabbitMq数据源二、多个RabbitMQ数据源2.1 增加配置信息2.2 代码实现三、RabbitMQ的optional queue arguments 和 policies3.1 optional queue agruments3.2 policies前言最近工作上需要在一个项目里面使用两个RabbitMq作为数据源,记录一下大概的实现过程,加深影响。一、单个RabbitMq数据源一般情况下,都是依赖单个RabbitMQ作..
2021-06-05 01:25:23
3739
原创 服务器半连接数异常
问题描述:2021-5-5 五一节假日的最后一天,现场服务器TCP半连接数97522,大于阈值30000,半连接数过大导致TCP连接无法释放,占用服务器连接资源过多,无法建立新的TCP连接,造成业务中断,CS\BS客户端无法登录。原因分析:TCP三次握手、四次挥手过程先通过TCP的三次握手、四次挥手过程,明白TCP半连接是处于TCP交互的那个阶段,如下是TCP三次握手、四次挥手的交互过程。CLOSED:初始状态,表示TCP连接是”关闭着的”或”未打开的”。LISTEN:表示服务器端的某个SO
2021-05-07 01:45:32
817
原创 axis2生成webservice java代码
首先要选择工程中对应的 axis2的jar包版本,不然生成的文件编译会报错,如 axis2-1.5.1 、axis2-1.5.2等然后用命令行操作生成客户端代码文件:cmd 进入命令行界面, F: 进入F盘 , cd F:\webService\axis2-1.6.2\bin 进入这个bin目录bin所在目录下执行set JAVA_OPTS=-Xmx512Mwsdl2java -uri F:\webService\mag.wsdl -p com.hikvision.cms.wsclient.s
2021-05-06 23:58:19
211
实用低频功率放大器设计
2012-07-20
VB中如何在一个Timer中实现对另外一个函数的立即终止
2015-06-27
TA创建的收藏夹 TA关注的收藏夹
TA关注的人