自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(77)
  • 收藏
  • 关注

原创 RocketMQ源码解析——Broker部分之消息接收过程`SendMessageProcessor`(3)

文章目录Broker启动时的准备netty启动时候的准备逻辑注册事件到Broker请求接收逻辑netty请求事件触发内部处理逻辑前面说了消息在Producer端的发送逻辑。这里结合Broker端来说一下。消息在Broker端接收的逻辑。Broker启动时的准备netty启动时候的准备逻辑关于Broker的启动逻辑这里注册事件到Broker请求接收逻辑netty请求事件触发内部处理逻辑...

2021-12-19 13:40:18 721

原创 RocketMQ源码解析——Producer部分之消息发送过程的一些重试和容错逻辑(2)

文章目录根据Broker和消息发布信息选择一个MessageQueue——`selectOneMessageQueue`前面说了消息发送的主逻辑这里主要说一下根据Broker和消息发布信息选择一个MessageQueue——selectOneMessageQueueselectOneMessageQueue是根据消息Topic的信息和BrokerName进行选择一个队列。这个方法定义在,容错策略的实现类MQFaultStrategy中。Producer端在发送消息的时候,会先根据Topic找到指定的

2021-12-14 23:13:06 714

原创 RocketMQ源码解析——Producer部分之消息发送过程DefaultMQProducer到DefaultMQProducerImpl(1)

文章目录发送消息入口`DefaultMQProducer`消息发送实现`DefaultMQProducerImpl`发送消息主方逻辑实现 `sendDefaultImpl`根据topic获取消息发布信息`tryToFindTopicPublishInfo`发送消息入口DefaultMQProducer前面说了RocketMQ消息生产者的启动逻辑,现在接着说对应的消息发送的逻辑。消息发送的入口在DefaultMQProducer类的send方法。这个方法有很多的重载方法对应的参数各不一样这里举例其中参数最

2021-12-11 13:09:58 2256

原创 RocketMQ源码解析——Producer部分之生产者客户端MQClientInstance启动(2)

文章目录 前面说了消息生产者的启动主要流程,从启动脚本到DefaultMQProducer再到DefaultMQProducerImpl然后到MQClientInstance。都是一步一步委托的。这里之所以把MQClientInstance单独拿出来说,是因为MQClientInstance这个类不仅仅在生产者用到,他还是消费者,RocketMQ的Admin控制台的共用客户端实体类。...

2021-11-20 16:16:03 1154

原创 RocketMQ源码解析——Producer部分之Producer启动过程DefaultMQProducer(1)

文章目录从官网说明开始字段摘要构造方法摘要使用方法摘要代码分析`DefaultMQProducer`的构造方法生产者实例的启动`start`方法 前面分析Broker的启动过程,接下来分析Producer的启动过程。从官网说明开始 先来看看官网的发送消息额实例代码public class Producer { public static void main(String[] args) throws MQClientException { // 创建指定分组名的生产者

2021-08-10 21:04:38 1147

原创 RocketMQ源码解析——Broker部分之Broker启动过程BrokerStartup(2)

文章目录 前面

2021-08-03 21:03:30 318

原创 RocketMQ源码解析——Broker部分之Broker启动过程BrokerStartup(1)

文章目录从启动脚本到启动类启动类`BrokerStartup`创建前的准备工作`createBrokerController`从启动脚本到启动类 我们知道RocketMQ的Broker端的启动方式为,进入到RocketMQ的bin目录下,运行对应的mqbroker脚本。 RocketMQ的Linux和Windows脚本内容也就是对应的mqbroker脚本,这里贴出来看看.......省略部分脚本export ROCKETMQ_HOMEsh ${ROCKETMQ_HOME}/bin/runbro

2021-07-19 23:11:07 622

原创 RocketMQ源码解析——存储部分(8)操作消息相关日志的中介DefaultMessageStore

文章目录前面介绍了RocketMQ的一些主要的日志文件,CommitLog,ConsumeQueue,IndexFile

2021-06-29 22:35:21 354

原创 RocketMQ源码解析——存储部分(7)延迟消息的原理`ScheduleMessageService`

文章目录延迟消息描述介绍延迟消息描述介绍RocketMQ的定时消息(延迟队列)是指消息发送到broker后,不会立即被消费,等待特定时间投递给真正的topic。broker有配置项messageDelayLevel,默认值为1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h,18个level。可以配置自定义messageDelayLevel。注意,messageDelayLevel是broker的属性,不属于某个topic。发消息时,设置

2021-06-15 22:45:46 657 1

原创 RocketMQ源码解析——存储部分(6)RocketMQ主从同步原理相关的HAService和HAConnection

文章目录引导引导 前面介绍了RocketMQ的CommitLog文件相关的类分析CommitLog物理日志相关的CommitLog类。其中有介绍到消息高可用刷盘的部分,也就是对应的handleHA方法,在这个方法中,如果设置了主从同步策略为同步,就会把对应的写入的消息的偏移量构造成一个GroupCommitRequest对象,然后丢到HAService类中进行处理,然后等待同步结果来进行后续操作,代码如下 public void handleDiskFlush(AppendMessageResul

2021-05-11 14:58:54 412

原创 RocketMQ源码解析——存储部分(5)IndexFile消息索引日志文件相关的`IndexService`类

文章目录IndexFile文件讲解概述文件结构IndexFile文件相关的类IndexFile头文件相关的`IndexHead`类IndexFile读写相关的`IndexFile`类字段属性内部方法分析构造方法保存key对应index的`putKey`方法根据时间区间查询和key来进行查询消息的`selectPhyOffset`方法操作IndexFile文件集合的`IndexService`字段属性内部方法构造方法创建消息索引和保存的`buildIndex`根据消息以及时间范围查询消息集合的`queryOf

2021-04-22 15:05:57 363

原创 RocketMQ源码解析——存储部分(4)ConsumeQueue逻辑日志文件相关的`ConsumeQueue`类

文章目录

2021-04-08 10:25:45 556

原创 RocketMQ源码解析——存储部分(3)CommitLog物理日志相关的`CommitLog`类

文章目录

2021-03-21 14:36:44 777

原创 RocketMQ源码解析——存储部分(2)对`MappedFile`进一步封装的`MappedFileQueue`

文章目录

2021-03-17 21:53:56 342

原创 RocketMQ源码解析——存储部分(1)消息存储的底层`MappedFile`

文章目录

2021-03-06 14:39:37 545 1

原创 RocketMQ文件存储体系介绍

文章目录

2021-03-06 14:38:17 868 1

原创 spring源码------一个请求在spring中的处理过程(HandlerAdapter的选择跟请求的处理)代码及流程图说明 (4)

文章目录前提1.`HandlerAdapter`对象2. 获取`HandlerAdapter`对象的`getHandlerAdapter`方法2.1 `getHandlerAdapter`方法分析2.1.1 容器中的`HandlerAdapter`对象以及实现的选择2.1.2 `RequestMappingHandlerAdapter`对`supports`的实现3. `HandlerAdapter`对请求处理的`hadler`方法3.1 逻辑交给子类实现的`hadler`方法3.2 `handleInte

2020-05-20 16:32:48 314 1

原创 spring源码------一个请求在spring中的处理过程(请求的处理链HandlerExecutionChain的选择)代码及流程图说明 (3)

文章目录前提1. `HandlerExecutionChain`对象2 如何获取`HandlerExecutionChain`对象的2.1 进入到`AbstractHandlerMapping`的`getHandler`方法1.1 这个`handler`默认情况下的实际类型前提 前面已经讲过了从Servlet规范到FrameworkServlet,以及从FrameworkServlet规范到D...

2020-05-15 15:05:51 1452

原创 spring源码------一个请求在spring中的处理过程(从FrameworkServlet规范到DispatcherServlet)代码及流程图说明 (2)

文章目录 前面的文章已经讲了从一个请求在spring中的处理过程(从Servlet规范到FrameworkServlet)代码及流程图说明接下来就是,从FrameworkServlet到DispatcherServlet的部分进行分析了。 在FrameworkServlet的processRequest方法中,有调用doService方法的这个步骤。...

2020-05-08 15:04:33 375

原创 spring源码------一个请求在spring中的处理过程(从Servlet规范到FrameworkServlet)代码及流程图说明 (1)

 在网上有很多spring处理请求的流程图,但是都是比较简单的过程,都是围绕的DispatcherServlet进行说明的,这里我们从一个请求进入到spring中开始,到返回结果结束进行说明。...

2020-01-07 13:43:13 749

原创 spring源码------spring什么时候以及何时初始化web应用相关上下文的(FrameworkServlet,DispatcherServlet)

 spring的web应用的上下文并不是在容器启动的时候就进行初始化的,而是在第一次请求的时候进行初始化的。1.从Servlet规范到Spring spring的web应用是基于Servlet规范...

2019-12-12 17:21:02 585

原创 spring源码------`@Schedule`跟`@Schedules`注解实现定时任务的原理

文章目录1.`@Scheduled`跟`@EnableScheduling`1.1 `@Scheduled`注解1.2 `@EnableScheduling`注解2 `@Scheduled`跟`@EnableScheduling`注解的解析2.1 `SchedulingConfiguration`1.@Scheduled跟@EnableScheduling1.1 @Scheduled注解 S...

2019-12-02 23:11:55 2743

原创 spring源码------@EnableAsync注解以及@Async注解如何配合完成方法异步调用的分析

文章目录1.`@EnableAsync`以及`@Async`的说明1.1 `@Async`1.2 `@EnableAsync`2. 源码分析2.1 基于`@Import`扩展的`AsyncConfigurationSelector`2.2 配置异步方法执行相关配置的`ProxyAsyncConfiguration`2.3 创建切点以及增强类的`AsyncAnnotationBeanPostProc...

2019-11-25 20:56:10 394

原创 spring源码------@Configuration跟@Component及其派生注解@Service等的区别以及spring对其代理增强的原理

文章目录1.常用的注解,以及`@Configuration`的特殊性2. `@Configuration`特殊性的源码解析2.1 贴有`@Configuration`的bean的获取2.1.1 bean注册前进行分类的方法`checkConfigurationClassCandidate`2.2 对bean进行增强2.2.1 获取需要代理增强的bean2.2.2 对bean进行代理增强2.2.3 ...

2019-11-21 16:16:38 1323

原创 spring源码------@EnableCaching,@Cacheable,@CacheEvict,@CachePut的实现原理

 spring中

2019-11-17 17:36:15 1455

原创 Spring扩展------基于`@Conditional`注解以及`Condition`接口的扩展

 @Conditional注解是spring在4.0版本提供的一个注解,作用是贴有这个注解或间接贴有的bean在满足指定的Condition接口实现类的matches方法校验之后,才注册这个bean。关于@Conditional注解的实现原理,可以看看前面写的一篇文章。@Conditional注解的解析。1. 直接使用@Conditional注解2. 间接使用@Conditional注解...

2019-11-09 10:19:51 202

原创 spring源码------`@ComponentScans`,`@ComponentScan`注解解析以及spring5.0新特性META-INF/spring.components文件...

1.@ComponentScans,@ComponentScan作用 @ComponentScan这个注解作用大家应该都熟悉,这里的作用大家应该都知道。用来指定spring注册bean的时候需要扫描的包或者类,还可以指定我们定义的bean名称生成器,代理类型,扫描过滤器等与xml配置形式的<context:component-scan>标签作用一样。看看其中的元素就知道。@R...

2019-10-29 17:16:55 2406

原创 spring源码解析------@Import注解解析与ImportSelector,ImportBeanDefinitionRegistrar以及DeferredImportSelector区别

1.@Import注解在springBoot中间接的广泛应用 在springboot中并没有直接显式的使用@Import标签,而是通过@Import标签来间接的提供了很多自动配置的注解。比如@EnableAutoConfiguration,@EnableConfigurationProperties等。这些标签的实现都是通过使用@Import标签来完成的。......@Import(Auto...

2019-10-29 09:55:18 1709

原创 spring源码------@Conditional注解的解析Condition接口,以及springboot中的扩展

1.SpringBoot中的共同点 在springBoot中有很多这种标签@ConditionalOnXXX标签让springBoot的代码更加标签化配置更加灵活。这些标签都有共同点,这里例举两个标签的源码1.1``@ConditionalOnXXX`......@Conditional({OnClassCondition.class})public @interface Conditi...

2019-10-22 10:46:34 1064

原创 6.juc包下的原子类AtomicInteger,AtomicLong等AtomicXXX介绍

 在介绍juc中的原子类之前,先看看官方文档对java.util.concurrent.atomic包的介绍官方文档地址这里截取翻译之后的部分描述1. 支持对单个变量进行无锁线程安全编程2. 类的实例`AtomicBoolean`,`AtomicInteger`,`AtomicLong`和`AtomicReference` 每个提供访问和更新相应的类型的单个变量3. 这些类不是 java.l...

2019-10-15 16:01:35 238

原创 java的JUC包下AtomicXXX中的set跟lazySet区别以及lazySet的原理

 AtomicInteger中的部分源码,set方法跟lazySet两个方法都是设置值的,那为何有两个呢public class AtomicInteger extends Number implements java.io.Serializable { static { try { valueOffset = unsafe.objectField...

2019-10-15 11:03:37 2034

转载 gcc内嵌汇编简单介绍,以及 __asm__ volatile ("": : :"memory")中memory解释

在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作。1、简单的内嵌汇编例:__asm__ __volatile__("hlt");`` "__asm__"表示后面的代码为内嵌汇编,"asm"是"__asm_...

2019-10-15 09:30:45 4784

原创 @Resource与@Autowired代码实现的区别以及,@PostConstruct,@PreDestroy标签的解析CommonAnnotationBeanPostProcessor

1.@Resource跟@Autowired @Resource标签在日常的Spring开发中跟@Autowired标签一样经常被用来注入对象用。虽然两者的作用一样,但是还是有区别的。这里简单说一下在注入时候区别1.使用上的区别1.@Resource@Resource装配顺序如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常如果...

2019-10-12 23:32:43 342 1

原创 Java并发相关文章说明

 对于Java并发这一块的知识,一直一来都是东一块西一块的,自己没有进行一次整体,自己的笔记也是有点凌乱。就想着整理一份完整的出来,参考源码跟资料进行整理。同时也监督自己养成一个好的周期性写博客的习惯。一下是对于相关知识的整理,如果缺少什么可以进行留言,我会进行补充。1.并发相关的原子性,可见性,顺序一致性,happen-before2.volatile关键字的作用和汇编原理3.synchr...

2019-10-09 15:14:36 89

原创 Spring源码-----@Autowired标签解析以及AutowiredAnnotationBeanPostProcessor

 关于Autowired这是spring内部的自带的依赖注入的标签,可以用在构造函数、字段、setter方法或者配置方法上。作用是将我们需要注入的对象由Spring自动注入到目标对象中。Autowired标签的解析逻辑主要在AutowiredAnnotationBeanPostProcessor类中,而除了Autowired标签还有Value标签以及JSR-330规范的Inject标签的解析也在这...

2019-09-29 16:35:00 647

原创 5.CAS以及相关的底层实现

前段时间找工作- -,一直没有什么时间写博客,断更了好长时间,不好意思了。1.锁带来的问题 前面在3.Java并发synchronized关键字解析中提到了synchronized实现的原理是通过对象的对象头中的标记来实现的,而且如果出现多线程争夺锁的时候后面还有一些系列的所膨胀的过程。这些过程都是比较消耗性能的。因此可以通过CAS来实现无锁的方式处理并发访问的问题。2.CA...

2019-09-27 19:51:20 208

原创 Spring源码----Spring的Bean生命周期流程图及代码解释

 在网上已经有跟多Bean的生命周期的博客,但是很多都是基于比较老的版本了,最近吧整个流程化成了一个流程图。待会儿使用流程图,说明以及代码的形式来说明整个声明周期的流程。注意因为代码比较多,这里的流程图只画出了大概的流程,具体的可以深入代码1.获取Bean第一阶段获取Bean 这里的流程图的入口在AbstractBeanFactory类的doGetBean方法,这...

2019-09-26 11:42:25 721

原创 4.Thread线程对象相关的方法和说明

1. 线程的创建 我们在创建一个线程的时候都是这么做的Thread thread = new Thread(() -> { IntStream.range(1, 1000).forEach(item -> System.out.println(Thread.currentThread().getName() + "---->" + it...

2019-07-02 17:51:16 227

原创 3.Java并发synchronized关键字解析

 对于synchronized关键字,作用应该都知道保证线程之间的同步性。准备从以下几个方面进行讲解。synchronized关键字的用法synchronized关键字不通用法在指令层面的异同点synchronized的实现方式跟锁膨胀1. synchronized关键字的用法  synchronized关键字可以出现在方法签名跟代码块中。可以分为,同步代码块,同步方...

2019-06-22 13:52:01 139

原创 2.Java并发volatile关键字的作用和汇编原理

 对于volatile关键字,很多人应该都有一个基本的了解和认知。volatile关键字有以下作用  1. 保证了不同线程间的可见性  2. 禁止对指令进行重排序1.高速缓存一致性协议 在了解保证可见性原因之前先了解一下cpu高速缓存一致性协议:  1.当cpu写入数据的时候,如果发现该变量被共享(也就是说,在其他cpu中也存在该变量的副本),会发出一个信号,通知其他CP...

2019-06-21 18:03:09 518 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除