- 博客(21)
- 收藏
- 关注
原创 RocketMQ核心链路图示
目录nameServer主要功能及发送、消费者发送、消费的重平衡机制普通、顺序、延迟消息主要流程事务消息核心流程broker主从相关主从读取消息:从节点同步topic、消费偏移量等信息Dledger状态机基于RAFT一致性协议的选举流程最近一直在结合着RocketMQ技术内幕学习rocketMQ源码,看完之后有了大概的认识,为了加深印象和树立大致的rocketMQ的运行流程,所以整理了几个MQ的核心流程图,包含了通常的消息的流转脉络,希望自己以后温故知新的同时,发出来给
2022-05-03 20:23:45 766
原创 Redis 持久化、复制、哨兵、集群随笔
目录redis持久化RDBAOFredis过期key:redis复制:redis哨兵模式:服务下线、故障转移故障转移细节新的主服务器是怎样挑选出来的redis clsuter 集群重新分片ASK错误复制和故障转移redis持久化redis的持久化是分为AOF、RDB两种方式。RDBredis数据库生成时间点数据的快照文件。当需要执行save、bgsave操作时,会fork出子进程,子进程去根据当前内存数据生成RDB文件,在创建子进程时.
2022-04-03 19:45:32 2563
原创 ReentrantLock流程图示及队列节点唤醒剔除解析
目录简介ReentrantLock加锁流程图示ReentrantLock解锁流程图示队列中node数据的流转addWaiteracquireQueued的shouldParkAfterFailedAcquire方法release扩展cancelAcquire方法简介ReentrantLock是一个可重入且独占式的锁,它具有与使用synchronized监视器锁相同的基本行为和语义,但与synchronized关键字相比,它更灵活、更强大,增加了轮询、超时、中断等..
2022-01-03 22:46:46 692
原创 EurekaServer集群同步源码解析
本文主要基于源码分析server集群间的数据同步,后续对部分server提供给client端续约、注册信息刷新等REST的接口进行简要分析。
2021-12-29 23:17:51 936
原创 EurekaServer基于源码的启动流程
EurekaBootStrapEureka-Server启动入口:该类实现了ServletContextListener,在 Servlet 容器( 例如 Tomcat、Jetty )启动时,调用#contextInitialized()方法。 @Override public void contextInitialized(ServletContextEvent event) { try { // 初始化eureka-server配置环...
2021-12-27 23:01:40 510
原创 EurekaClient端启动源码流程详解
Client端是通过DiscoveryClient来实现对Server里注册的服务进行操作的,下面主要来解析DiscoveryClient这个类。DiscoveryClient(ApplicationInfoManager applicationInfoManager, EurekaClientConfig config, AbstractDiscoveryClientOptionalArgs args, Provider<BackupRegistry&g
2021-12-26 21:14:09 664
原创 Spring Boot 基于源码的启动流程详解
SpringBoot在日常工作中带来了很多便利,通过application.properties即可替换默认属性值通过@SpringBootApplication和SpringApplication.run()即可完成Spring容器的启动,并自动为我们创建自动配置的bean,如下图,本文主要关注springboot启动时,自动创建过滤自动配置类、业务bean、加载资源文件的整体流程。SpringBootApplication注解@Target(ElementType.TYPE)@Ret.
2021-12-12 16:35:08 607
原创 基于SpringMVC、Tomcat源码的请求链路图示解析
Spring启动时SpringMVC的组件初始化发起请求的执行链路:下图是在未配置DispatchServlet的load-on-startup属性时,调用情况,若配置load-on-startup大于、等于0,那么初始化servlet的流程会在tomcat启动或热部署时完成。关于tomcat加载load-on-startup大于0的servlet可见下面代码:tomcat源码的StandardContext类public boolean loadOnStartup(Cont.
2021-11-06 20:25:36 474
原创 Tomcat 内部各个组件、启动、请求解析原理分析
Tomcat 组件简介tomcat的各个组件Http请求的执行图示:tomcat启动源码时序图tomcat接受请求源码时序图Tomcat各个组件Tomcat启动流程启动时序图中,已经大致疏通了整体tomcat的启动流程,有些细节点还是需要关注,如:这些组件的关联关系,一个请求是如何被解析指定到具体的Wrapper,然后执行servlet方法的。Tomcat的执行请求流程tomcat类加载机制...
2021-10-31 21:47:11 657
原创 对Spring IOC、AOP的认识及项目中应用场景
BeanFactory、applicationContext的容器区别先从BeanFactory和applicationContext的源码,来大致看下这两个类BeanFactory定义的是一个接口,具体的实现交给子类完成(DefaultListableBeanFactory成熟bean工厂等),定义了些对bean最基本的操作, 主要是获取bean、判断IOC容器中是否存在该bean、判断bean是单例还是多例模式、bean的class类型匹配等,所以通常认为beanFactory是IOC的低级
2021-10-17 15:57:34 4357
原创 【源码解析】Spring如何处理循环依赖?
在进入正题之前,抛出一个问题给大家思考下,这个是当时面试家有学霸时,二面提出的一个问题:当出现循环依赖时(A依赖B,B依赖A),此时A中的B对象有没有A,B中的A对象有没有B,大家可以想下,后面解答。什么是循环依赖?有两个或两个以上的引用相互指向,即A->B,B->A,更具体的说就是:@Componentpublic class A { @Autowired private B b;}@Componentpublic class B { @Au
2021-09-21 16:39:41 380
原创 Spring Boot 通过监听器方式整合 RocketMq(基于模板方法的并发消费、局部顺序消息消费)
项目中有关rocketMq及相关类的Maven依赖 <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-spring-boot-starter</artifactId> <version>2.1.1</version> <
2021-09-04 13:28:48 3766
原创 基于反射机制的多种实现方式的自定义注解,来实现特定的功能
反射反射的应用场景是非常多的,框架的底层大多都会涉及到反射,包括我们现在要谈的自定义注解,所以在开始之前,先对反射进行一个基础的介绍。什么是反射?官方解释:JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制详细原理,大家也看下这篇文章,在原理上面说的还是较为详细的Java反射的原理解析及使用反射常用方法操作解析直接上代码,我在
2021-03-27 17:36:25 461
原创 Java1.8新特性Optional和stream流操作的用法,为什么要用这些?
Java1.8新特性Optional和stream流操作的用法,为什么要用这些?欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体验;在创作中心设置你喜爱的代
2021-03-20 15:25:36 2555
原创 RocketMQ常见问题及实现分布式事务时注意事项
RocketMQ常见问题及实现分布式事务时注意事项RocketMQ常见的一些疑问或问题1、如何防止消息丢失的问题2、如何防止消息的重复消费问题(幂等性问题)3、消息如何保证消费顺序的问题4、消息积压、阻塞怎么解决?5、如何保证消息不会丢失RocketMQ实现分布式事务时注意事项1、MQ半消息回查,若得不到该消息是提交还是回滚,会一直隔一段时间就查询一次吗?1、二阶段异常,需要回滚怎么处理?2、消费者消费失败后,会重试吗,多次重试后还是失败会怎么样?RocketMQ常见的一些疑问或问题1、如何防止消息丢失
2021-03-13 23:04:50 3252
原创 基于RocketMQ的分布式事务解决方案(实操)
基于RocketMQ的分布式事务解决方案前言什么分布式事务?分布式事务产生的场景如何解决分布式事务RocketMQ 基本使用实操场景建表生产者消费者验证前言什么分布式事务? 随着互联网的快速发展,软件系统由原来的单体应用转变为分布式应用,分布式系统会把一个应用系统拆分为可独立部署的多个服务,因此需要服务与服务之间远程协作才能完成事务操作,这种分布式系统环境下由不同的服务之间通过网络远程协作完成事务称之为分布式事务,例如用户注册送积分事务、创建订单减库存事务,银行转账事务等都是分布式事务。分布式
2021-03-11 13:45:42 3623 13
原创 Redis如何保证与数据库的数据一致性?
Redis如何保证与数据库的数据一致性?前言前提先删除缓存数据,再修改数据库数据先修改数据库数据,再删除缓存数据双删延迟策略前言在我们日常开发中,随着数据的增长、请求量的增加,不可避免的要用到缓存相关的技术,Redis作为目前主流的作为缓存的非关系型数据库,功能十分强大。多种数据类型、支持持久化、快速读写、高可用、横向扩展是Redis的成为主流缓存技术的主要原因。火箭造完了,接下来搞点干货当我们使用Redis来缓存数据时,某个需缓存的数据进行修改时(如:Redis缓存了商品信息,商家操作修改了昵称),
2021-03-06 15:22:55 3229 3
原创 String为什么要重写equals方法,你真的知道吗?
String为什么要重写equals方法,你真的知道吗?前言涉及知识点==和equals的区别方法区(元数据区)存放什么数据String s ="a";和String s = new String("a");的区别前言前几天去一家上市公司面试的时候,技术问出了这个问题,这个之前还没有考虑过,其实面试中会有很多这种扩散性思维的问题出现,这个就需要我们有足够的知识储备和一定的思考能力。大家可以先自己想一下重写equals是什么原因,可能善于思考的朋友已经有一些自己的见解,话不多说,开始正题。涉及知识点
2021-02-28 17:12:08 1546 3
原创 如何自测接口的QPS、最大吞吐量
如何自测接口的QPS、最大吞吐量什么是QPS为什么要知道接口QPS实操接下来进行Jmeter压测什么是QPSQPS = req/sec = 请求数/秒原理:每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间公式:( 总PV数 * 80% ) / ( 每天秒数 * 20% ) = 峰值时间每秒请求数>(QPS)机器:峰值时间每秒QPS / 单台机器的QPS = 需要的机器上面是QPS精准的理解,当然我们也可以简单的理解为:QPS(Query Per Second):每秒请求数,
2021-02-28 10:41:56 21998
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人