自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 RocketMQ Consumer接收消息流程

 这节介绍Consumer接收消息的流程,分为Pull和Push模式。1. 初始化 上一节讲Rebalance时提到,Consumer接受客户端有两种方式:Broker发现客户端列表有变化,通知所有Consumer执行RebalanceConsumer定时每20秒自动执行Rebalance其中1.的通知到达Consumer后,会立即触发Rebalance,然后...

2020-02-25 21:20:19 2340

原创 RocketMQ Rebalance流程分析

 这节介绍Rebalance流程。在介绍Consumer消费消息流程前,先介绍Rebalance得流程,该过程涉及到Consumer的启动。 之前介绍过,Topic是一个逻辑概念,Topic下可以划分多个Queue以增加Consumer消费的并行度。在一个Consumer Group内,Queue和Consumer之间的对应关系是一对多的关系:一个Queue最多只能分配给一个...

2020-02-21 13:43:03 2296

原创 RocketMQ客户端加载流程

 这节介绍RocketMQ客户端的启动流程,即Consumer和Producer的启动流程。1. 客户端demo 首先先看下客户端的demoProducer:public class SyncProducer { public static void main (String[] args) throws Exception { // 实例化消...

2020-02-06 08:53:10 1153

原创 RocketMQ Producer发送消息流程

 这节介绍Producer发送消息的流程。 接上一节开头的Demo,发送消息的写法如下:public class SyncProducer { public static void main (String[] args) throws Exception { // 实例化消息生产者Producer DefaultMQProduce...

2020-02-06 08:50:38 1129

原创 RocketMQ Producer发送消息流程

 这节介绍Producer发送消息的流程。 接上一节开头的Demo,发送消息的写法如下:public class SyncProducer { public static void main (String[] args) throws Exception { // 实例化消息生产者Producer DefaultMQProduce...

2020-02-05 23:50:22 381

原创 RocketMQ客户端加载流程

 这节介绍RocketMQ客户端的启动流程,即Consumer和Producer的启动流程。1. 客户端demo 首先先看下客户端的demoProducer:public class SyncProducer { public static void main (String[] args) throws Exception { // 实例化消...

2020-01-20 23:26:55 314

原创 RocketMQ客户端加载流程

 这节介绍RocketMQ客户端的启动流程,即Consumer和Producer的启动流程。1. 客户端demo 首先先看下客户端的demoProducer:public class SyncProducer { public static void main (String[] args) throws Exception { // 实例化消...

2020-01-18 00:29:18 442

原创 SpringMVC加载流程

 这节介绍SpringMVC,SpringMVC是一种基于Java的实现MVC设计模式的请求驱动类型的轻量级Web框架。本章会介绍相关概念,流程,再从源码进行讲解。1. MVC MVC(Model View Controller)是一种软件设计的框架模式,它采用模型(Model)-视图(View)-控制器(controller)的方法把业务逻辑、数据与界面显示分离。MVC框...

2020-01-07 22:55:30 2021

原创 RocketMQ介绍

 消息队列是分布式系统中重要的组件,使用消息队列主要是为了通过异步处理提高系统性能和削峰、降低系统耦合性。Apache RocketMQ是由阿里巴巴开源的可支撑万亿级数据洪峰的分布式消息和流计算平台,于2016年捐赠给Apache Software Foundation,2017年9月25日成为Apache 顶级项目。由于其高稳定性、低延时、高吞吐量等特点,被大规模应用于金融、互联网、物...

2019-12-28 21:16:58 1080 1

原创 Instrument API介绍

1. Instrumentation介绍 JVMTI(JVM Tool Interface)是 Java 虚拟机所提供的 native 编程接口,是 JVMPI(Java Virtual Machine Profiler Interface)和 JVMDI(Java Virtual Machine Debug Interface)的更新版本。JVMTI 提供了一套“代理”程序机制,可以...

2019-12-21 18:36:35 1739

原创 字节码增强

 上节介绍了Java字节码结构,这节介绍字节码增强技术。Java字节码增强指的是在Java字节码生成之后,对其进行修改,增强其功能,这种方式相当于对应用程序的二进制文件进行修改。 常见的字节码增强技术包括:Java自带的动态代理ASMJavassist1. 动态代理 在介绍动态代理前,先介绍代理模式。如下图,为代理模式的UML类图:代理模式是一...

2019-12-13 21:41:59 1041

原创 Class文件格式

 我们知道Java是一门跨平台的语言,我们编写的Java代码会被编译成中间class文件以让Java虚拟机解析运行。而Java虚拟机规范仅仅描述了抽象的Java虚拟机,在实现具体的Java虚拟机时,仅指出了设计规范。Java虚拟机的实现必须体现规范中的内容,但仅在确有必要时才应该受制于这些规范。对于完整内容,可以查看原文档,以JDK7为例,可查看https://docs.oracle.c...

2019-12-08 10:15:12 1044

原创 Spring AOP

 这节介绍Spring AOP。关于Spring AOP的名字就不多做介绍了,网上有很多对AOP的解释。1. 概念术语1.1 切面(Aspect) 切面是一个关注点的模块化,这个关注点可能是横切多个对象;1.2 连接点(Join Point) 连接点是指在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候;1.3 通知(Advice)&e...

2019-11-30 09:36:48 912

原创 扩展阿里p3c实现自定义代码规范检查

 前段时间fastjson报出了漏洞,只要打开setAutoType特性就会存在风险,自己测试环境的一个项目被揪出来了-_-!。虽然改动很小,但就是觉得憋屈。fastjson还是挺好的,想着禁用的话太可惜,用的话又要注意安全,就想着找款工具提示下在用fastjson的时候不要打开这个特性。刚好阿里开源了p3c([https://github.com/alibaba/p3c](https:...

2019-10-25 16:10:35 3446 2

原创 Spring DestorySingleton流程

 第一节介绍Spring启动(链接)时,介绍AbstractApplicationContext的过销毁过程,主要是调用了内部的destroyBeans方法,这节便来介绍bean的销毁过程。一.销毁流程destroyBeans方法内部委托给了DefaultSingletonBeanRegistry的destroySingletons方法。destroySingletons方法如下,比...

2019-10-13 11:21:47 1209

原创 Spring GetBean流程

 第一节讲解Spring启动的时候说到,Spring内部先解析了所有的配置,加载所有的Bean定义后,再根据需要对Bean进行实例化和初始化。除开Spring自己主动新建的对象,第一次根据Bean定义加载对象的动作出现在AbstractApplicationContext的invokeBeanFactoryPostProcessors方法,该方法会在Spring容器中找出实现了BeanF...

2019-10-06 10:27:46 533

原创 Spring GetBean流程

 第一节讲解Spring启动的时候说到,Spring内部先解析了所有的配置,加载所有的Bean定义后,再根据需要对Bean进行实例化和初始化。除开Spring自己主动新建的对象,第一次根据Bean定义加载对象的动作出现在AbstractApplicationContext的invokeBeanFactoryPostProcessors方法,该方法会在Spring容器中找出实现了BeanF...

2019-10-06 09:53:43 417

原创 Spring BeanDefinition的加载

 前面提到AbstractRefreshableApplicationContext在刷新BeanFactory时,会调用loadBeanDefinitions方法以加载系统中Bean的定义,下面将讲解Bean定义的加载过程。一.XML定义 XML配置的加载由AbstractXmlApplicationContext实现,方法实现如下: 主要是实例化了一个X...

2019-10-04 16:09:10 946

原创 Spring Environment的加载

 这节介绍environment,默认环境变量的加载以及初始化。 之前在介绍spring启动过程讲到,第一步进行环境准备时就会初始化一个StandardEnvironment。下图为Environment类图的接口,可以分为4块内容:ConversionService(蓝):类型转换服务PropertySource(绿):键值对数据源PropertyResolver(...

2019-10-03 07:04:34 1283

原创 Spring启动流程

 Spring用了挺久的了,但是没系统做过总结,刚好前段时间在做一个Spring封装的项目,趁机回顾了下,便基于Spring framework 4.3.22做了源码分析。 刚开始接触Spring时的入门例子大致如下: 设置配置文件路径,初始化ApplicationContext然后获取Bean,处理完后关闭context即可。这一节先来了解Spring的启动过...

2019-10-02 14:01:05 1057

原创 Sentinel Cluster流程分析

 前面介绍了sentinel-core的流程,提到在进行流控判断时,会判断当前是本地限流,还是集群限流,若是集群模式,则会走另一个分支,这节便对集群模式做分析。一.基本概念 namespace:限流作用于,用于区分一个规则作用于什么范围 flowId:代表全局唯一的规则 ID,Sentinel 集群限流服务端通过此 ID 来区分各个规则,因此务必保持全局唯一。一...

2019-10-01 08:11:43 1033

原创 Sentinel Core流程分析

 上次介绍了Sentinel的基本概念,并在文章的最后介绍了基本的用法。这次将对用法中的主要流程和实现做说明,该部分主要涉及到源码中的sentinel-core模块。1.token获取  如上为token获取的主流程,首先会先获取线程的上下文对象Context,然后根据ResourceName查找对应的处理槽链,获得SlotChain后,生成该次调用动作的Entry对象,...

2019-09-30 09:08:50 903

原创 Sentinel基本概念

 Sentinel是阿里开源的一款高性能的限流框架。这里将对Sentinel的使用和实现进行介绍。 这里先介绍下Sentinel中涉及到的基本概念,包括使用上或者实现上。主要是笔者在阅读文档和源码时经常会接触到的对象。Resource 资源是整个Sentinel最基本的一个概念。可以是一段代码,一个http请求,一个微服务,总而言之,他是Sentinel需要保证...

2019-09-29 09:24:29 681

原创 Java的EOF标识?

 这篇是关于JAVA中EOF标识的讲解,之前在工作上碰到过一个问题,有人问过,不能通过判断EOF来知道文件有没有读取完毕吗?其实,还真不能。 直接从JDK接口文档入手,以FileInputStream为例,JDK接口文档给出了明确的说明: 使用FileInputStream的read方法读取文件时,当返回-1就表明读到了文件末尾,如果期间出现IO异常,则会抛出一...

2019-09-29 09:14:36 1110

原创 分布式一致性协议

 介绍常见的分布式一致性协议一.CAP/BASE1. CAP理论 CAP理论又称之为布鲁尔定理(Brewer’S theorem),认为在设计一个大规模可扩放的网络服务时候不能同时兼容:一致性(consistency)、可用性(Availability)、分区容错(Partition-tolerance)。 一致性:在分布式系统中的所有数据备份,在同一时刻是...

2019-09-27 07:56:07 424

原创 Redis集群

 这节介绍Redis的集群模式 主从模式提供了读写分离的支持,Sentinel提供了高可用的保障,满足了读模式下的横向扩展,但主节点只有一个,集中式的写模式无法应对不断增长的写需求。 Redis 3.x 版本提供了Redis cluster功能,服务端sharding使用槽作为分布式的解决方案。对于 2.x版本,则通过客户端API提供的客户端sharding方式,...

2019-09-26 07:53:00 987

原创 Redis Sentinel

 这节介绍Redis的高可用解决方案:Sentinel1.介绍 Sentinel是Redis官方推荐的高可用(HA)解决方案,当用Redis做master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换。 Sentinel本身是一个运行在特殊模式下的Redis服务器,它能监控多个master-sl...

2019-09-25 06:09:35 495

原创 Redis发布与订阅

 这节介绍Redis的发布与订阅 Redis提供了发布与订阅的功能,客户端能够向服务器订阅某个频道,当其他客户端向服务器的该频道发布消息时,服务器会将消息推送到订阅该频道的客户端。提供的命令包括:SUBSCRIBE channel [channel …]该命令可以向服务器订阅多个频道的消息。与之对应的有UNSUBSCRIBE命令。PSUBSCRIBE patt...

2019-09-24 00:13:43 378

原创 Redis主从复制

 这节介绍Redis的主从复制过程,包括建立和复制。1.复制的建立1.1 SLAVEOF命令 Redis支持主从模式以提供读写分离,可以通过在从服务器的客户端上执行如下命令以连接主服务器: SLAVEOF IP PORT或者在配置文件中配置SLAVEOF选项。1.2 建立过程 SLAVEOF命令包括以下几个步骤:从服务设置主服务...

2019-09-23 00:29:21 831

原创 Redis持久化

 这节介绍Redis的持久化,包括RDB和AOF两种方式。1.RDB持久化 Redis能够将内存中的数据持久化到RDB文件中,避免数据丢失。RDB文件的格式如下示: 第一部分是开头的5个字节,值为REDIS,第二部分是长度为4个字节的版本号,值为一个字符串表示的整形。database部分包含零个或任意多个数据库,以及各个数据库中的键值对数据,database的...

2019-09-22 00:30:46 848

原创 Redis基本结构

 之前看了《Redis设计与实现》这本书,对Redis的认识加深了一些,便做了一些总结,同时也记录下自己的一些想法。 这节先介绍Redis提供的基本结构,主要分为底层的基本结构和以对象形式包装的Object结构。1.SDS C字符串在redis中主要用于无须对字符串值进行修改的地方,对于需要修改字符串的场景,则使用SDS(简单动态字符串)。SDS的结构如下示:...

2019-09-21 12:32:52 1007

空空如也

空空如也

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

TA关注的人

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