- 博客(18)
- 收藏
- 关注
原创 FeinClient服务实例缓存实时刷新
penFeign默认会将从注册中心Consul获取的服务实例信息在Caffine缓存中缓存35秒,这会出现服务下线后,下线服务仍然被调用的问题,导致上游服务在缓存有效期内不可用。本文讲解如何通过Consul Watch机制来实时监听相关服务的更新,以实现服务的平滑上下线。源码中ConsulCatalogWatch类会定时监听(默认1秒)Consul的服务状态变化,仿照Spring Cloud Config,监听Consul心跳事件,在Consul中注册的服务实例信息变更时,刷新Caffine缓存。
2024-06-22 10:21:04 392
原创 并发编程—AQS源码分析
AQS(AbstractQueuedSyncronizer)是一个抽象的队列同步器,通过维护一个共享资源状态(volatile int state)和一个先进先出(FIFO)的线程等待队列来实现一个多线程访问共享资源的同步框架。
2023-07-08 18:45:43 83
原创 MyBatis源码深度分析(一):整体流程
XMLConfigBuilder 对象继承 BaseBuider 抽象类,其parse方法用来解析 mybatis-config.xml 配置文件。parseConfiguration方法负责解析mybatis-config.xml配置中各个节点。实例化XMLConfigBuilder对象时会创建配置类Configuration。进入SqlSessionFactoryBuilder类的build方法。
2023-07-01 16:36:24 132
原创 JAVA笔记:线程池ThreadPoolExecutor
3.如果阻塞队列BlockingQueue已满且线程池中工作线程数少于maximumPoolSize(最大线程数),则开启新的临时工作线程执行已提交任务;线程池的运行状态和工作线程数量共用同一AtomicInteger类型的原子变量ctl存储,高3位存储运行状态,低29位存储正在运行的工作线程数。1.如果线程池中工作线程少于corePoolSize(核心线程数量),无论工作线程是否空闲,都将开启新的工作线程执行该任务;
2023-06-18 18:56:11 97
原创 SpringBoot自动装配源码分析
EnableAutoConfiguration注解使用@Import注解导入AutoConfigurationImportSelector类,该类使用SpringFactoriesLoader类加载classpath下META-INF/spring.factories文件中EnableAutoConfiguration属性定义的一系列自动装配类,结合@Conditional注解实现按需加载;
2023-06-11 17:24:04 130
原创 Spring Cloud GateWay系列(四):路由规则动态刷新
Spring Cloud Gateway 基于 WebFlux 框架实现,而 WebFlux 框架底层则使用了高性能的 Reactor 模式通信框架 Netty。Spring Cloud Gateway最主要的功能就是路由转发,定义转发规则RouteDefinition时主要涉及了三个核心概念。核心概念 描述 Route(路由) 网关最基本的模块。它由一个ID、一个目标URI、一组断言(Predicate)和一组过滤器(Filter)组成。 Predicate(断言) .
2022-05-22 18:44:07 3100 1
原创 ShardingJDBC实战(一):按年月分表
云Pass平台面向多租户,需要每日统计各租户的具体使用量,用于向租户展示使用量详情和汇总每月使用量,以便对租户账户进行扣款和与租户对账。平台租户30万+,各租户每天产生的各类统计信息大致在30+,每月产生的数据记录数接近千万,因此进行水平分库分表是十分必要的。ShardingSphere-JDBCShardingSphere-JDBC是Apache ShardingSphere的第一个产品,也是Apache ShardingSphere的前身。定位为轻量级Java框架,在Java的JDBC层提供的额
2022-05-14 22:47:16 7162 11
原创 Linux常用命令总结
pwd命令print work directory 用于显示工作目录cd命令change directory 用于切换当前工作目录cd ~ 进入当前用户的home目录 cd 进入当前用户的home目录 cd - 进入上次目录 cd .. 进入上一级目录 cd . 进入当前目录 ls命令linux下ls -l命令(即ll命令)查看文件的显示结果分析_leon1741的博客-CSDN博客list files 用于显示指定目录下之内
2022-05-04 17:25:32 1140
原创 分布式事务系列(三):TCC和本地消息表
Martin Fowler在他的文章中解释了“微服务架构”的主要思想和原则https://gist.github.com/yulewei/1240ad4ee486c6e61f7178263cf09fe4https://gist.github.com/yulewei/1240ad4ee486c6e61f7178263cf09fe4采用微服务架构的应用程序越来越多,围绕微服务产生的安全性、事务原子性、可靠性等问题的讨论越来越重要。TCC架构TCC事务其实主要包含两个阶段:Try阶段、Conf.
2022-04-30 19:33:16 458
原创 SpringBoot WebFlux系列(一):使用示例
Why use reactive processing?关于SpringBoot WebFlux,Spring官网有如下解释很能说明问题:One of the main reasons developers move from blocking to non-blocking code is efficiency. Reactive code does more work with fewer resources. Project Reactor and Spring WebFlux let de
2022-04-10 17:05:42 2466
原创 分布式事务系列(二):Seata的AT模式使用示例
Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata的AT模式基于支持ACID事务的关系型数据库,是2PC(两阶段提交协议)的演变: 一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。 二阶段: 提交异步化,非常快速地完成。 回滚通过一阶段的回滚日志进行反向补偿。 写隔离 一阶段本地事务提交前,需要确保先拿到 全局锁 。拿不到 全局锁 ,不能提交本地事务。拿 全局锁 的尝试被限制在一定范围内,超出范
2022-04-05 19:33:05 2909
原创 分布式事务系列(一):Seata的AT模式整体流程
微服务架构关于微服务,ThoughtWorks 公司的首席科学家 Martin Fowler有如下解释:In short, the microservice architectural style is an approach to developing a single application as asuite of small services, eachrunning in its own processand communicating with lightweight mech...
2022-04-03 17:24:45 2067
原创 Spring Security系列(一):自定义AuthenticationFilter
Spring Security自定义AuthenTokenFilter
2022-03-27 19:05:33 2011
原创 Spring Cloud GateWay系列(三):路由规则动态刷新
Spring Cloud Gateway旨在提供一种简单而有效的方式来路由API,并为它们提供横切关注点,例如:安全性、监控/指标和弹性。Route(路由)是网关的基本单元,由唯一标识符ID、目标地址URI、一组Predicate、一组Filter组成,根据Predicate进行匹配转发。使用配置文件构建路由规则的简单样例如下:#指定监控和管理端口management.server.port=9090#指定需要公开的监控端点management.endpoints.web.exposure.in
2022-03-13 12:03:59 3085
原创 Spring Cloud Gateway系列(二):CORS跨域配置
对于云Paas平台,对外提供的API需要满足客户多种场景的调用需求,其中就包括WEB端的对接。由于浏览器同源策略的限制,Spring Cloud Gateway接收到的客户WEB场景下请求必然存在跨域问题,浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。这篇文章对CORS进行了详细的介绍,拜读之后受益匪浅。https://www.ruanyifeng.com/blog/2016/04/cors.htmlS...
2022-03-06 19:20:54 2903
原创 Spring Cloud Gateway系列(一):整体流程
GateWay作为Spring Cloud的全新项目用来取代旧版本中的Netflix Zuul,从而实现更高的性能,本系列将会以下三个部分:整体流程 全局CORS配置 动态路由刷新使用配置文件配置的样例:Gateway接收到来自客户端的请求之后,请求首先进入HttpWebHandlerAdapter类:@Overridepublic Mono<Void> handle(ServerHttpRequest request, ServerHttpResponse res.
2022-02-27 19:45:17 750
原创 ShardingJDBC+JPA分表查询时物理表采用MySQL自增主键产生的查询BUG排查
很懒,不爱写东西,这次BUG排查印象深刻,过程有点痛苦,仅作为笔记形式供自己和大家参考,避免在以后遇到同类问题时继续踩坑...背景云PASS平台需要统计各租户的客户端使用者每天发送的各种消息类型的消息量,根据使用量生成账单展示给租户方便客户对账。使用量统计服务(DATA服务)作为微服务架构中的独立服务,消费上游服务推送至kafka的消息记录,将消息处理后暂存至Redis,然后在空闲时间将数据保存至数据库。由于平台使用量较大,每天产生的kafka消息在10亿以上,平台30万租户,每天产生的数据库记录在
2022-01-16 19:15:26 2435 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人