- 博客(29)
- 收藏
- 关注
原创 Spring Cloud:深入浅出服务调用组件Feign原理、源码分析
Feign 是一个声明式 Web服务客户端,使用它创建一个接口并注解,使得编写 Web服务客户端变得更加容易。它支持可插拔注解,包括 Feign 注解和 JAX-RS 注解,还支持可插播得编码、解码器。Cloud 增加了对 Spring MVC 注解的支持,默认使用 httpmessageconverter 的支持。Cloud 集成了 Ribbon 和 Eureka以及 BalanceLoad,使得在使用 Feign 时支持 Http 客户端的负载均衡。Feign 自定义的客户端配置不需要使用 @C
2020-08-20 11:31:55 424
原创 Spring Cloud:服务注册与发现机制、源码分析
前言什么是服务?如何注册与发现? 接触 Spring久 了,就会发现 Spring 最擅长的事情就是抽象和封装。所以我们听到最多的就是今天整合这个功能、明天整合那个中间件,把流行的好用的全部都整合进来。 其实 Spring Cloud 现在已经是一块主板了,上面插满了各种组件,它用自己的“电源”和“总线”为大家
2020-06-06 00:53:34 966
原创 Spring:基于注解、代码实现 Bean 定义/注册的 ConfigurationClassPostProcessor 的原理机制
一、问题 每接触一项新事物,我们总是因为疑惑而去探索。 从传统 xml 配置转到基于注解、代码实现 Spring Bean 定义、注册,Spring 提供了各种注解,例如 @Configuration、@Import、@ComponentScan、@Autowired,那 Spring 是怎么识别和解析这些注解的呢?可
2020-06-05 18:49:32 395
原创 Spring容器生命周期回调机制——Lifecycle
前言 在使用 Spring 开发时,我们都知道,所有 bean 都交给 Spring 容器来统一管理,其中包括每一个 bean 的加载和初始化。有时候我们需要:在 Spring 加载和初始化所有 bean 后,接着执行一些任务或者启动需要的异步服务,当我们遇上这样的情况,有什么方法可以解决?定时任务?怎么去控制这个时间点?现在基于Spring的应用非常多,Spring有没提供相应的机制?Spring 给我
2020-05-29 01:42:56 856
原创 RocketMQ:剖析ACL权限控制原理、实现和应用
前言 RocketMQ 作为一款优秀的中间件,应用领域非常广泛,金融、电商、电信、医疗、社科、安保等不同的领域都有其大规模的应用,无疑安全性很受质疑,因为内部没有安全相关的业务模块,消息的发送和消费得不到很好的安全管控需要业务方自己去封装安全模块,无形中增加了使用成本。 在 RocketMQ 4.4.0 版本升级中加入
2020-05-29 01:19:13 2755
原创 RocketMQ:深入浅出消息轨迹设计、源码实现分析
一、前言 消息轨迹 在不少情况是很重要的,主要指的是一条消息从生产方发出到消费方消费处理,整个过程中的各个相关节点的时间地点等数据汇聚而成的完整链路信息。比如消息到底有没有发送出去,消息存储在哪个Broker,消息被哪些消费者消费、消费时间、消费耗时等等。 RocketMQ中的一条消息的完整链路包含消息生产方、Bro
2020-05-28 22:46:50 1008 1
原创 RocketMQ:Consume如何获取并维护消费进度和确保消息消费不丢失
前言 回顾 Consumer 消息拉取消费机制 我们了解了 Consumer 如何启动并拉取消息消费的机制。PullMessageService 负责对消息队列进行消息拉取,从远程服务器拉取消息后将消息存入 ProcessQueue 消息队列处理队列中,然后调用 ConsumeMessageService#submitConsumeRequest 方法进行消息消费,使用线程池来消费消息,确保了消息拉取与消费的解耦
2020-05-28 18:26:54 1134
原创 RocketMQ:消息拉取和消息队列负载分布机制
一、前言 Consumer 消息消费流程比较复杂,包含模块有:消息查找、负载均衡、消息过滤、消息处理、回发确认、消息进度维护等。限于篇幅,本篇主要介绍 Consumer 启动流程及消息拉取实现机制。 消息消费以组的模式开展,一个消费组内可以包含多个消费者,每个消费组可以订阅多个 Topic,消费组之间有集群模式和广播模
2020-05-28 16:22:33 1333
原创 Spring:容器创建流程(源码解读)
1122public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // 准备正在刷新的上下文,设置启动时间和激活标识,初始化上下文中使用占位符的属性 prepareRefresh(); // 获取新的BeanF...
2020-04-22 10:44:53 312
原创 Spring Cloud:Ribbon(客户端负载均衡器)
Ribbon 是 Netflix 公司开源的一个负载均衡的项目,它是一个基于 HTTP 和 TCP 的客户端负载均衡工具。通过 Spring Cloud 的封装,可以让我们轻松地将面向服务的 REST 模板请求自动转换成客户端负载均衡的服务调用。
2020-03-10 18:07:03 568
原创 Java并发:Executor框架(线程池)
线程池 顾名思义就是事先创建若干个可执行的线程放入一个池(容器)中,需要的时候从池中获取线程不用自行创建,使用完毕不需要销毁线程而是放回池中,从而减少创建和销毁线程对象的开销。
2020-01-17 01:00:48 282
原创 JVM:内存模型
Java 内存模型(Java Memory Model,JMM)用来屏蔽掉各种硬件和操作系统的内存访问差异,是一种规范,目的是解决由于多线程通过共享内存进行通信时,存在的本地内存数据不一致、编译器会对代码指令重排序、处理器会对代码乱序执行等带来的问题。
2019-11-08 01:49:56 144
原创 JVM:类加载机制(类生命周期概述)
类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。
2019-11-07 17:54:42 491 1
原创 X/Open DTP:分布式事务模型
X/Open DTP(X/Open Distributed Transaction Processing Reference Model)是 X/Open 这个组织定义的一套分布式事务的标准,定义了如何在分布式、开放环境中执行事务处理,也就是了定义了规范和API接口。
2019-11-06 21:30:43 520
原创 Nacos:配置中心原理分析
一、 有一个问题我们需要弄明白,那就是 Nacos 客户端是怎么实时获取到 Nacos 服务端的最新数据的? 其实客户端和服务端之间的数据交互,无外乎两种情况:服务端推数据给客户端;客户端从服务端啦数据...
2019-11-06 15:42:28 2679
原创 RocketMQ:存储架构
RocketMQ 将所有 Topic 的消息存储在同一个文件中,确保消息发送时顺序写入文件,为了提高消息消费的效率,RocketMQ 引入了 ConsumerQueue 消息队列文件、IndexFile 索引文件。
2019-11-06 15:38:19 482 1
原创 RocketMQ:读写分离机制
一般来说,选择主从备份实现高可用的架构中,都会具备读写分离机制,RocketMQ 的读写分离机制又跟上述描写的不太一致,它有属于自己的一套读写分离逻辑,会判断主服务器的消息堆积量来决定消费者是否向从服务器拉取消息消费。
2019-11-06 15:37:39 1273
原创 RocketMQ:主从同步机制
主从同步,同步的是啥?作为消息中间件,无疑是消息相当于给数据做备份,主节点宕机后,消费者可以从 从节点消费消息,可以保证业务的正常运行。
2019-11-06 15:37:33 914
原创 RocketMQ:介绍和核心概念
RcoketMQ 是一款低延迟、高可靠、可伸缩、易于使用的消息中间件。它由四部分组成:NameServer 集群、Broker 集群、Producer 集群和 Consumer 集群,每一个都可以水平扩展,而且没有单一的故障。
2019-11-06 15:36:32 261
原创 RocketMQ:深入理解路由中心(NameServer)
Broker在启动时,向所有NameServer注册,生产者/消费者在发送/消费消息时,先从NameServer获取Broker服务器地址列表。
2019-11-06 15:36:19 885
原创 Dubbo:本地伪装与服务降级
一、目标二、前言 本地伪装和服务降级,本地伪装通常用于服务降级,比如某验权服务,当服务提供方全部挂掉后,客户端不抛出异常,而是通过 Mock 数据返回授权失败。而服务降级则是临时屏蔽某个出错的非关键服务,并定义服务降级后的返回策略。...
2019-11-06 15:35:20 374
原创 Dubbo:SPI扩展机制
SPI 的全名为 Service Provider Interface,在面向对象的设计里面,模块之间推荐基于接口编程,而不是实现类进行硬编码,这样做也是为了模块设计的可插拔原则。为了在模块装配的时候不在程序里指明是哪个实现,就需要一种服务发现的机制,JDK 的 SPI 就是为某个接口寻找服务实现的。
2019-11-06 14:59:51 300
原创 Seata:Hello World
Seata 是阿里巴巴开源的一款分布式事务中间件,它的愿景是让分布式事务的使用像本地事务的使用一样,以高效并且对业务0侵入的方式,解决微服务场景下面临的分布式事务问题。
2019-11-06 14:59:04 646
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人