- 博客(170)
- 收藏
- 关注
原创 【xxl-job调度器的源码分析】
调度器是任务管理的核心组件,主要负责任务的调度、执行和监控。调度中心(Admin)通过Web控制台和后台定时调度器实现任务管理、日志查看和失败重试等功能,并将任务通过网络调用推送给执行器。其核心功能包括定时调度任务(基于Cron表达式)、分片广播(多执行器并行处理)、超时控制与失败重试、以及子任务链路的触发。调度器的执行流程包括任务扫描、任务触发、执行器注册与心跳监控、失败重试机制,以及超时任务的处理。调度器通过定期扫描数据库和执行器状态,确保任务高效执行,并在任务失败或超时时进行重试或标记失败,保障系统的
2025-05-13 16:19:15
307
原创 【RocketMq延迟消息操作流程】
消息一开始不会立刻到达业务 Topic,而是先进入系统内部的 延迟Topic(名字叫 SCHEDULE_TOPIC_XXXX)。当定时任务(TimerTask)触发时,去扫描 延迟消息队列(也就是延迟Topic:SCHEDULE_TOPIC_XXXX),brokerController启动时,会执行start方法,然后也会Master的角色的broker启动一个定时任务。比如 Level 3 的消息,写到 SCHEDULE_TOPIC_XXXX 主题的第三个队列里。
2025-04-29 11:04:28
624
原创 【RocketMq-消费者消费逻辑分析】
进入这个类 defaultMQPushConsumerImpl#doRebalance方法。执行updateProcessQueueTableInRebalance()方法。开启拉消息服务,主要执行PullMessageService中的run方法。消息投递消费,分为两种,并发消费和顺序消费,这个方法是并发消费的点。执行RebalanceImpl#rebalanceByTopic()调用pullMessage()方法获取消息。pillMessage() 方法。//消费完成后,我们处理消费结果。
2025-04-27 17:26:49
946
原创 【Nacos-安全与限流机制健全06 】
一、Nacos安全控制机制Nacos 提供了多种安全控制机制,以保证服务和配置的访问安全:身份验证 (Authentication)Nacos 支持用户身份验证来防止未授权的访问。其实现方式如下:Basic Authentication:通过 HTTP 请求头传递用户的认证信息(如 Authorization),Nacos 会校验用户名和密码。
2025-04-25 16:53:37
974
原创 【B+树数据结构】
B+ 树是一种 自平衡的多叉搜索树,常用于 数据库索引(如 MySQL)和文件系统。它是 B-树(B-tree)的变种,具有更高的磁盘读写效率和范围查询性能。特点:1 所有数据存储在叶子节点,非叶子节点仅存储索引键,不存数据。2 叶子节点之间有指针相连,支持高效的区间查询。3 多路平衡树(非二叉树),每个节点最多有 M 个子节点(M 阶 B+ 树)。4 根节点到叶子节点的路径长度相同,保持树的平衡性。5 非叶子节点不会存储数据,只作为索引,提高内存利用率。
2025-04-03 11:21:10
843
原创 【Spring-事务总结】
Spring 事务(Spring Transaction)用于保证数据一致性,避免并发问题,确保数据库操作符合 ACID(原子性、一致性、隔离性、持久性) 原则。原子性(Atomicity) 事务中的所有操作要么全部成功,要么全部回滚一致性(Consistency) 事务执行前后,数据库保持一致隔离性(Isolation) 并发事务相互独立,避免脏读、不可重复读、幻读持久性(Durability) 事务提交后,数据永久存储。
2025-03-27 10:44:01
1032
原创 【java代理模式】
代理模式(Proxy Pattern) 是 结构型设计模式 之一,为某个对象提供一个代理,以控制对该对象的访问。CGLIB(Code Generation Library) 是基于 ASM 生成字节码的动态代理技术,可代理没有接口的类。动态代理(JDK 动态代理):运行时动态生成代理对象,基于 InvocationHandler 和 Proxy。CGLIB 动态代理:使用 字节码技术 生成代理类(适用于没有接口的类)。代理类 运行时生成,无需手写代理类。代理类是被代理类的子类(继承方式)
2025-03-21 14:19:57
330
原创 【spring-cloud负载均衡策略实现】
负载均衡(Load Balancing)是一种将流量分配到多个服务器的技术,旨在提高系统的可用性、性能和可靠性。它的核心目标是确保所有服务器负载均匀,避免某个服务器过载而影响系统运行。创建我们自定义的ReactorLoadBalancer,自定义一个类,继承ReactorServiceInstanceLoadBalancer,自定义的实现choose方法//如何选择我们的实例@Override// 选择第一个实例(自定义逻辑)配置 ReactorLoadBalancer Bean。
2025-03-06 17:55:10
484
原创 【Nacos服务的发现和订阅总结】
服务发现是指 服务提供者(Provider)自动注册到 Nacos,服务消费者(Consumer)可以通过 Nacos 获取最新的服务实例列表,实现动态调用。Nacos 服务发现流程1.服务提供者注册启动时,将自己的信息(IP、端口、元数据等)注册到 Nacos。2.Nacos 维护服务实例,Nacos 维护一个服务实例列表,并定期进行健康检查。3.服务消费者发现,消费者从 Nacos 获取可用实例列表,调用合适的实例。
2025-03-05 15:32:50
901
原创 【SpringBoot自动装配总结】
Spring Boot 的自动装配(Auto Configuration)是一种机制,能够自动配置 Spring 容器中的 Bean,避免繁琐的 XML 或 Java 配置代码,让开发者可以专注于业务逻辑,而不用关心底层的 Spring 配置。Spring Boot 通过 @EnableAutoConfiguration 注解,结合 spring.factories 机制,在应用启动时自动注册和配置所需的 Bean。
2025-02-24 15:31:45
1154
原创 【异步编程解析】
FutureTask 是 Java 并发包 (java.util.concurrent) 中的一个 可取消的异步计算任务,它实现了 Runnable 和 Future 接口,可以用于 异步任务执行 和 获取结果。CompletableFuture 是 Java 8 引入的 异步编程工具,提供了更强大的功能来处理异步任务、组合任务、并行计算,并支持非阻塞编程。supplyAsync() 适用于有返回值的异步任务。runAsync() 适用于没有返回值的异步任务。
2025-02-20 17:58:21
484
原创 【并发工具解析】
它维护了一组许可(permits),线程必须先获取许可才能继续执行,使用完后需要释放许可。CyclicBarrier 是 Java 并发工具类,用于让一组线程相互等待,直到所有线程都到达屏障后再继续执行。可选的 barrierAction(当所有线程到达时,自动执行一个任务)。所有线程都必须到达屏障(await()),否则它们都要等待。例如,并行计算任务,多个线程计算子任务,最后主线程汇总。让多个线程 同时开始执行某个任务,用于并发测试。例如,赛跑比赛,所有选手准备好后,一起起跑。
2025-02-17 16:37:36
828
原创 【数据结构-红黑树】
红黑树(Red-Black Tree)是一种自平衡的二叉查找树(Binary Search Tree, BST),它在普通二叉查找树的基础上增加了一些额外的约束条件,以确保树的平衡性,从而保证在最坏情况下插入、删除和查找操作的时间复杂度为 O(logn)。
2025-02-11 13:50:28
2376
原创 【Lock中的Condition分析】
在 Java 中,Lock 和 Condition 是并发编程中用于实现线程同步的重要工具,它们提供了比传统 synchronized 更灵活的线程控制能力。Lock 提供了显式的锁操作,而 Condition 则允许线程在某些条件不满足时挂起,并在条件满足时被唤醒。以下是一个使用 Lock 和 Condition 实现生产者-消费者模型的示例代码。这个示例展示了如何通过 Lock 和 Condition 来协调生产者和消费者的行为。
2025-01-23 13:53:28
1044
原创 【支付架构业务架构】
3.判断当前的商户配置的结算是D0还是D1,如果是D0,请求计费系统根据配置的商户费率,计算出手续费,一般的商户手续费千分之六来收取,手续费为0.03元,商户应该收到的金额为4.97元,如果为D1结算,先不计算手续费,第二天凌晨统一结算。7.如果为D1账户类型,我们在D+1的凌晨进行清结算,计算出手续费和商户的应得金额,通过日终翻账将商户的应得金额转入现金账户,手续费转入内部收益账户。2.业务侧收到的一笔请求,先进行基本的数据校验,保证业务校验逻辑通过后,将数据落入订单表中,业务校验失败,返回交易失败。
2025-01-14 14:02:46
929
原创 【SpringAop实现切片注解】
Spring AOP(Aspect-Oriented Programming)是 Spring 框架中的一项功能,旨在通过切面(Aspect)将横切关注点(Cross-Cutting Concerns)与业务逻辑解耦,从而使代码更加模块化和易维护。Spring AOP(Aspect-Oriented Programming)是 Spring 框架中的一项功能,旨在通过切面(Aspect)将横切关注点(Cross-Cutting Concerns)与业务逻辑解耦,从而使代码更加模块化和易维护。
2025-01-10 16:36:13
1042
原创 【Sharding-Jdbc总结】
Sharding-JDBC 是 Apache ShardingSphere 的一个模块,它是一个 轻量级的 Java 数据访问框架,通过增强 JDBC 驱动实现了分库分表、分布式事务、读写分离和数据加密等功能。它适用于任何基于 JDBC 的应用程序。
2025-01-03 14:12:42
882
原创 【spring-cloud-gateway总结】
在微服务架构中,gateway网关是一个服务,它作为系统的唯一入口点,处理所有的客户端请求,然后将这些请求路由到适当的服务。提供了几个关键功能:1.请求路由:根据请求的URL路径和其他参数,将请求路由到正确的后端服务。2.负载均衡:在多个服务实例之间分配流量,以提高可用性和可扩展性。3.认证和授权:检查用户是否有权访问特定的服务。4.限流:控制访问后端服务的请求速率,以防止过载。5.监控:收集关于API使用情况的统计数据,用于分析和计费。
2024-12-22 20:37:25
553
原创 【SpringBoot-事件监听】
2. 创建监听器3. 发布事件注意事项1.确保事件发布者和监听器处于同一个Spring应用程序上下文中。2.事件发布是异步的,所以事件处理方法不应该有关于执行时间的假设。3.事件监听器方法可以声明抛出异常,这些异常会被Spring捕获并记录。
2024-12-11 21:24:15
388
原创 【Open-Fegin使用介绍】
OpenFeign 是一个声明式的Web服务客户端,它使得编写Web服务客户端变得更加容易。OpenFeign 旨在整合Ribbon和Nacos,为微服务架构中的服务间调用提供声明式的REST客户端。它使得编写服务客户端变得简单,就像编写本地接口一样。以下是OpenFeign的一些关键特性:1.声明式REST客户端:OpenFeign允许你通过定义一个接口并使用注解来声明服务调用,而不是编写客户端的实现代码。
2024-12-04 21:36:15
720
原创 【Spring Security框架解析】
Spring Security是一个功能强大且高度可定制的Java安全框架,用于保护基于Spring的应用程序。它提供了全面的安全服务,包括认证(Authentication)、授权(Authorization)、防止CSRF等。认证(Authentication)认证是确认用户身份的过程。Spring Security支持多种认证机制,如表单登录、HTTP基本认证、OAuth2、LDAP等。授权(Authorization)授权是确定用户是否有权限访问特定资源的过程。
2024-12-02 20:54:50
1084
原创 【Naocs-04源码分析-服务健康检查】
Nacos中临时实例基于心跳上报方式维持活性,基本的健康检查流程基本如下:Nacos客户端会维护一个定时任务,每隔5秒发送一次心跳请求,以确保自己处于活跃状态。Nacos服务端在15秒内如果没收到客户端的心跳请求,会将该实例设置为不健康,在30秒内没收到心跳,会将这个临时实例摘除。可以看出定时任务的执行间隔就是配置的metadata中的数据preserved.heart.beat.interval,与上面提到配置heart-beat-interval本质是一回事,默认是5秒。
2024-11-21 16:17:00
761
原创 【Lambda表达式与Stream API】
Lambda表达式(也称为λ表达式)是Java 8中引入的一种新特性,它允许你以简洁的语法编写匿名函数。Lambda表达式主要用于实现没有名称的内联函数,它们可以作为参数传递给方法,或者作为返回值。(参数列表)->{Lambda体}测试案例:新起一个线程打印hello world字段//非lambda表达式写法@Override).start();//lambda表达式写法}).start();函数式接口可以有一个或多个默认方法和静态方法,但只能有一个抽象方法。
2024-11-21 11:25:12
1062
原创 【Mysql主从复制总结】
MySQL的主从复制(Master-Slave Replication)是一种数据库复制技术,用于将一个数据库服务器(主服务器,Master)上的数据更改同步到一个或多个其他数据库服务器(从服务器,Slave)上。这种技术可以用于多种目的,包括数据备份、负载均衡、高可用性、读写分离等。以下是主从复制的一些关键点:1.数据备份和高可用性:主从复制可以用于创建数据的热备份,即在从服务器上实时复制主服务器的数据,以防止主服务器发生故障时数据丢失。
2024-11-18 16:27:26
895
原创 【mybaties-plus多数据源配置】
随着项目规模的扩大,单一数据源已无法满足复杂业务需求,多数据源(动态数据源)应运而生。本文将介绍两种 MyBatis-Plus 的多数据源扩展插件:开源生态的 dynamic-datasource和mybatis-mate。
2024-11-12 21:48:21
557
原创 【mybaties-plus配置自动路由月表】
InnerInterceptor 是 MyBatis Plus 提供的一个拦截器接口,它允许开发者在 MyBatis 的执行过程中插入自定义逻辑。这个接口是 MyBatis 插件机制的一部分,可以用来拦截和修改 SQL 语句、处理事务、日志记录等。接口处理:在 StatementHandler 准备 SQL 语句之前调用。可以在这里修改 SQL 语句或者执行一些前置处理。在 StatementHandler 准备 SQL 语句之后调用。
2024-11-10 20:51:52
865
原创 【xxl-job总结】
XXL-JOB是一个轻量级分布式任务调度平台,它的核心设计目标是开发迅速、学习简单、轻量级、易扩展。1.简单易用:XXL-JOB提供了友好的Web界面,使得用户可以通过简单的操作完成任务的创建、编辑、删除和查询。2.动态管理:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效。3.调度中心高可用(HA):调度采用中心式设计,支持集群部署,可保证调度中心的高可用性。4.执行器高可用(HA):任务分布式执行,执行器支持集群部署,可保证任务执行的高可用性。
2024-11-05 21:44:09
1017
原创 【Nacos-03集群内数据同步讲解】
当服务启动时,如果是Follower节点接收到请求,则会自动将请求转发给Leader节点,Leader节点完成实际的注册登记工作后,会向其他Follower节点发起“同步注册日志”的指令,以确保所有节点的数据一致性,Distro算法是集群中的一台机器收到接收到写请求并处理后,它会异步地将数据变更复制到其他节点,这样可以减少对写操作的延迟影响 ,来保证最终一致性,因此Nacos的临时节点保证AP,持久节点保证CP。这意味着在不同的地理位置,Nacos节点之间需要同步数据,以确保服务的连续性和数据的一致性。
2024-10-27 21:14:19
1464
1
原创 【延时队列的实现方式】
DelayQueue是一个BlockingQueue(无界阻塞)队列,它本质就是封装了一个PriorityQueue(优先队列),PriorityQueue内部使用完全二叉堆(不知道的自行了解哈)来实现队列元素排序,我们在向DelayQueue队列中添加元素时,会给元素一个Delay(延迟时间)作为排序条件,队列中最小的元素会优先放在队首。Redis的数据结构Zset,同样可以实现延迟队列的效果,主要利用它的score属性,redis通过score来为集合中的成员进行从小到大的排序。
2024-09-25 21:24:31
1146
原创 【JAVA集合总结-贰】
AtomicInteger 是 Java java.util.concurrent.atomic 包中的一个类,它提供了一种线程安全的方式来操作整数。AtomicInteger 利用底层的硬件原子指令(如 Compare-And-Swap,即 CAS 指令)来保证操作的原子性,从而避免了使用同步锁带来的性能开销。AtomicInteger 是 Java java.util.concurrent.atomic 包中的一个类,它提供了一种线程安全的方式来操作整数。
2024-09-24 21:28:09
1142
原创 【JAVA集合总结-壹】
伪共享(False Sharing)是多线程系统中一个常见的性能问题,它发生在多个线程对位于同一缓存行中的不同变量进行操作时。由于缓存行是缓存系统中数据存储的最小单位,当多个线程修改同一缓存行中的变量,即使这些变量是独立的,也会导致缓存行在处理器之间频繁地无效和同步,从而引发性能下降。伪共享的影响伪共享会导致CPU缓存的利用率降低,增加线程同步的开销,并降低程序的可扩展性。在多核处理器系统中,如果多个线程在竞争同一缓存行,它们可能无法充分利用多核处理器的并行处理能力。避免伪共享的策略。
2024-09-22 20:50:19
1056
原创 【Mysql-索引总结】
索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。数据库使用索引以找到特定值,然后顺指针找到包含该值的行。这样可以使对应于表的SQL语句执行得更快,可快速访问数据库表中的特定信息。
2024-09-20 14:44:22
924
原创 【限流算法】
令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法。典型情况下,令牌桶算法用来控制发送到网络上的数据的数目,并允许突发数据的发送。
2024-09-18 21:32:17
484
原创 【RocketMq消费者Rebalance总结-3】
Rebalance机制,即再均衡机制,是RocketMQ中一个重要的功能。当一个Topic下的多个队列(或称之为分区)需要在同一个消费者组下的多个消费者实例之间进行重新分配时,就会触发Rebalance机制。该机制的本意是为了提升消息的并行处理能力。举例来说,如果一个Topic下有5个队列,在只有1个消费者的情况下,那么这个消费者将负责处理这5个队列的消息。如果此时我们增加一个消费者,那么可以通过Rebalance机制,给其中一个消费者分配2个队列,给另一个分配3个队列,从而提升消息的并行处理能力。
2024-09-01 16:58:22
1079
原创 【分布式架构幂等性总结】
用户上车后刷码支付扣款成功,如果用户再次点击按钮刷卡并扣款成功,用户查询余额返发现多扣钱了,流水记录也变成了两条,这就没有保证接口的幂等性。在执行操作之前,检查请求是否已经被处理过,例如,通过查找数据库中的记录或检查缓存中的标记。分布式缓存中的节点可能会重复接收到相同的更新请求,需要保证操作的幂等性以避免数据不一致。在多线程或多进程环境中,为了避免并发导致的数据不一致问题,需要保证操作的幂等性。在使用缓存系统时,为了保证缓存与数据库之间的一致性,缓存更新操作需要是幂等的。
2024-08-27 21:46:39
934
原创 【秒杀系统架构图】
秒杀系统一般出现正在电商平台中,秒杀系统需要支持高并发,保持一致性和高可用的特点:高性能。秒杀涉及大量的并发读和并发写,因此支持高并发访问这点非常关键。本专栏将从设计数据的动静分离方案、热点的发现与隔离、请求的削峰与分层过滤、服务端的极致优化这4个方面重点介绍。一致性。秒杀中商品减库存的实现方式同样关键。可想而知,有限数量的商品在同一时刻被很多倍的请求同时来减库存,减库存又分为“拍下减库存”“付款减库存”以及预扣等几种,在大并发更新的过程中都要保证数据的准确性。高可用。
2024-08-20 21:17:33
527
原创 【ThreadLocal总结】
remove方法会将ThreadLocal为null对应的value设置为null,同时会把对应的Entry对象也设置为null,并且会将所有ThreadLocal对应的value为null的Entry对象设置为null,这样就去除了强引用,便于后续的GC进行自动垃圾回收,也就避免了内存泄露的问题。此时,我们可以看到,Entry对象中的Key,也就是ThreadLocal对象可以被GC自动回收,但是对应的value还在被引用,所以,value是不能被GC自动回收的,这种情况下就会存在内存泄露的风险。
2024-08-06 21:25:16
834
原创 【SpringCloud-Seata源码分析3】
seata后台服务时对事务进行的异步提交,首先来分析一下我们后端服务的入口DefaultCoordinator#doglobalCommit方法。前面两篇我们分析了seata的TC初始化和TM,RM初始化,并且事务准备阶段源码及业务Sql执行,下面我们分析事务的提交源码。AT模式将事务状态改为异步提交AsyncCommitting,然后定时运行线程池1s轮训运行一次。服务端的事务回滚是从GlobalRollbackRequest方法进入的。获取所有的一步提交状态的事务,并加上排他锁。
2024-06-24 21:30:03
636
4
原创 【SpringCloud-Seata源码分析2】
我们分支事务的开始需要从PreparedStatementProxy#executeUpdate中去看。第一篇我们将全局事务启动,以及开启源码分析完成了,现在我们需要看一下分支事务注册。我们首先看一下分支事务服务端注册的入口DefaultCoordinator#判断出当前的业务Sql是什么类型,我们需要选择不同的执行器。我们的核心分支事务注册代码。组装请求数据,发送后端。创建封装分支事务的信息。excute()执行。
2024-06-22 21:24:59
373
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人