自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

YourBatman

专注Java领域分享、成长,拒绝浅尝辄止。公众号搜索:BAT的乌托邦

原创 一、为何我决定写Spring Cloud专栏
原力计划

你对Spring Framework的了解程度决定了你对Spring Boot的了解程度,你对Spring Boot的了解程度决定了你对Spring Cloud的了解程度。 了解我文章的小伙伴应该知道,到目前为止A哥还几乎没有写过`Spring Boot/Spring Cloud`的文章,虽然写了...

2020-04-28 21:53:31 4069 15

原创 Netflix OSS套件一站式学习驿站
原力计划

Netflix OSS是由Netflix公司主导开发的一套代码框架/库,目的是用于解决大规模集群的分布式系统的一连串问题,如:服务发现、负载均衡、熔断降级、限流、网关等等。对于当代的Java开发者来说,`Netflix OSS`似乎已经成为了云端开发/微服务开发解决方案的代名词。**有些人把Spr...

2020-04-19 17:18:41 5011 7

原创 二、何为Spring Boot整合Spring Cloud?
原力计划

一方面了解了A哥的“创作背景”;另一方面,当然也是最主要的便是我们已经初步了解了`Spring Cloud Context`工程,并且对它的`spring.factories`文件做了介绍,从中是能窥探出SC的核心组成“元素”的。 天若有情天亦老,人间正道是沧桑。接下来会进入到“枯燥乏味”的修行...

2020-04-30 12:08:44 2486 2

原创 不懂SpringApplication生命周期事件?那就等于不会Spring Boot嘛
原力计划

关于Spring Boot最主要的类的生命周期,此篇文章值得收藏

2020-04-27 11:25:42 3738 8

原创 [享学Ribbon] 二十七、手把手教你原生Ribbon整合Eureka实现负载均衡
原力计划

本文是个纯代码示例的手工活,是对前两篇文章一个很好的总结。了解A哥的风格是清楚的:理论先行,代码示例跟上加固。我们从小学就知道学习需要**多看、多想、多做(多实现)**,代码更是如此。在现在信息大爆炸时代,大多数人对“多看”做的都挺好,但是殊不知:**看和做往往是有一道银河的距离的**。所以A哥在...

2020-04-23 09:52:55 1561 0

原创 [享学Ribbon] 二十六、Ribbon和Eureka的整合(二):DiscoveryEnabledNIWSServerList从Eureka Server获取服务列表
原力计划

上篇文章A哥给大家介绍了Ribbon和Eureka的整合工程的部分内容,建立在你已经对Eureka比较熟悉的基础上,从中定能窥探出它的好处以及关键整合点。不过A哥想说,上篇文章的介绍只是开胃小菜,本文介绍内容才是重中之重。

2020-04-23 08:07:36 968 2

原创 [享学Ribbon] 二十五、Ribbon和Eureka的整合(一):ribbon-eureka工程详解
原力计划

`Ribbon`作为客户端负载均衡器,有一个必要的基础条件就获取到`ServerList`服务器列表,以及后续的动态更新服务列表。通过前面学习知道,服务列表它可以来自**任何地方**,比如默认实现`ConfigurationBasedServerList`它表示服务列表可以来自于配置(文件)。实际...

2020-04-22 23:27:21 1624 0

原创 [享学Archaius] 十七、Spring的Environment是如何整合进Archaius从而实现全局共享的?
原力计划

上篇文章主要介绍了`Archaius`和`Spring Cloud`的整合工程`spring-cloud-starter-netflix-archaius`的内容,本文将继续,会将站在**实用的角度**,深度分析`ArchaiusAutoConfiguration`该自动配置类到底做了哪些事,以及...

2020-04-18 23:15:48 997 0

原创 Spring的Bean有序吗?试试用@DependsOn或static来提高优先级
原力计划

顺序:意思是依次而不乱。顺序在生活的方方面面都显得尤为重要,自然的它对**程序执行**来说也是至关重要的。有了顺序的保证,我们就能对“结果”做出预期,作为coder的我们对应的也就更能“掌控”自己所写代码,心里也就更加踏实。 顺序固然重要,但是不乏有些场景它是不需要顺序保证的。**一般来说**:...

2020-04-18 17:56:00 1532 3

原创 使用@AutoConfigureBefore调整配置顺序竟没生效?
原力计划

调整配置的顺序,如是而已

2020-04-18 17:20:07 2790 0

原创 [享学Archaius] 一、初识Archaius的简单使用及高级使用
原力计划

Archaius是一个配置管理库,其重点是来自多个配置存储的动态属性。它包括一组用于Netflix的Java配置管理API。它主要实现为`Apache Commons Configuration`库的扩展。提供的主要功能有: 1. 动态、类型属性 2. 高吞吐量和线程安全的配置操作 3. 一个轮询...

2020-04-16 10:52:58 1016 0

原创 [享学Eureka] 三十四、借助Guice的DI依赖管理,轻松实现一键启动Eureka Client端完成服务注册
原力计划

回想一下,在本系列第一篇文章就有提到过,Eureka它是使用轻量级DI框架:谷歌的Guice来管理其依赖的。通过前面这么多篇文章的学习,有理想相信亲们已经了解了Eureka几乎每个组件的作用以及**它们的依赖关系**。即使如此,但若现在要你构件其一个**完整可用**的Eureka Client客户...

2020-04-15 21:48:42 1028 2

原创 [享学Eureka] 三十三、Eureka内置公用小工具:StringCache及详解String#intern()
原力计划

上坡的路都是累的设置难受的,要控制好自己的情绪。 –> 返回专栏总目录 <– 代码下载地址:https://github.com/f641385712/netflix-learning 目录前言正文详解String#intern()源码(native代码)参阅代码示例总结 前言 继上...

2020-04-15 16:28:35 513 0

原创 [享学Eureka] 三十二、Eureka内置公用小工具:基于令牌桶算法的RateLimiter限流器
原力计划

关于**基于令牌桶**的限流器实现,我想最出名的当属Google开源项目Guava中的`RateLimiter`了吧,它具有非常强大的功能特点,使用也非常的方便。 但本文介绍的不是Google家族的`RateLimiter`,而是Eureka自己实现的一个工具`RateLimiter`,它虽然功...

2020-04-14 08:09:26 1032 0

原创 [享学Eureka] 三十一、DiscoveryClient透彻解析(八):接口方法和shutdown()方法详解
原力计划

关于`DiscoveryClient`这一个类的解析竟然已经到了第8篇了,经过了前7篇高密度的讲述,主体内容其实已经基本完成了,但正所谓“革命尚未统一”,就差本文临门一脚。接下来将会把其余下内容:接口方法的实现进行讲述清楚便算大功告成,并且对其最为重要的`shutdown()`方法进行一个详细的介...

2020-04-12 23:43:51 512 0

原创 [享学Eureka] 三十、DiscoveryClient透彻解析(七):initScheduledTasks() 初始化调度任务
原力计划

本文接着上篇文章的讲解,继续深入`DiscoveryClient`初始化阶段剩下的两个步骤:`register()`注册当前实例和`initScheduledTasks()`初始化调度任务。

2020-04-12 16:46:44 445 0

原创 [享学Eureka] 二十九、DiscoveryClient透彻解析(六):fetchRegistry() 拉取注册表信息
原力计划

在通过前面几篇文章介绍`DiscoveryClient`后,对它的核心内容已经有了较为深入的理解,此刻你基本可以放心的对自己说:对Eureka(client端)已经了解到了7、8成了。但作为一个有态度、有追求的程序员,我们可以更优秀。 本文将结合前几篇所述内容作为铺垫,深入挖掘`Discover...

2020-04-12 16:19:44 543 0

原创 [享学Eureka] 二十八、DiscoveryClient透彻解析(五):HeartbeatThread和CacheRefreshThread
原力计划

DiscoveryClient中有两个非常重要的内部类:`HeartbeatThread`和`CacheRefreshThread`,他俩是调度任务中真正干活的两个**任务类**,因此单摘出来放在一起讲述一把,防止迷路。 另外,前面有篇文章专门介绍了实例复制器`InstanceInfoRepli...

2020-04-12 14:20:27 434 0

原创 [享学Eureka] 二十七、DiscoveryClient透彻解析(四):增量获取注册表
原力计划

继上篇文章介绍了对注册表的全量获取后,本文来到注册表获取的主菜:Delta增量获取。增量操作并不少见,在MySql、Redis等里都有所体现,它一种轻量级方式实现,好处不言而喻。 如果说全量获取是初级程序员,那么增量获取怎么也算高工了。增量获取属于精细化操作,它需要考虑的因素众多,因此处理起来也...

2020-04-11 23:20:35 821 0

原创 [享学Eureka] 二十六、DiscoveryClient透彻解析(三):全量获取注册表
原力计划

Eureka属于c-s的设计模式,Client端本地需要维护一份注册表信息,因此它需要周期性的去远程Server端获取,这种获取注册表的方式有两种:**全量获取和增量获取**。 全量获取:顾名思义,**大而全**是它的特点,通信上属于一种相对较重的操作。 增量获取:每次仅获取**发生了变化的数据...

2020-04-11 22:37:23 793 0

原创 IntelliJ IDEA 2020.1正式发布,你要的Almost都在这!
原力计划

千呼万唤始出来。自从官方在2020-01-20发布了其**2020年的Roadmap**,我便持续关注着、期待着它“新10年”的首个版本的发布,这不就在**昨天(2020-04-09)**发布了其“新10年”的首个版本:`IntelliJ IDEA 2020.1`。按照国际惯例,作为大版本号的升级...

2020-04-11 08:45:13 34009 173

原创 [享学Eureka] 二十五、DiscoveryClient透彻解析(二):初始化逻辑详解
原力计划

主要介绍了`DiscoveryClient`的成员属性,达30+个之多。我们发现其成员属性中,绝大多数否是final修饰,也就是说他们大多均得在`DiscoveryClient`初始化阶段完成赋值,由此你也能感受到它初始化的“压力”。 确实,`DiscoveryClient`的初始化阶段是它,*...

2020-04-08 23:54:33 782 0

原创 [享学Eureka] 二十四、DiscoveryClient透彻解析(一):功能概述 + 成员属性详解
原力计划

说到`DiscoveryClient`,很多小伙伴对它望而却步。那么从此篇开始,**正式**进入Eureka Client端最深水区内容,同时它也是最难啃的一块骨头:`DiscoveryClient`。由于本类过于庞大且复杂,我会分拆为多篇文章逐步讲解,势必要达到完全掌握的目的。 了解一个类,就...

2020-04-08 10:31:58 475 0

原创 [享学Eureka] 二十三、DiscoveryClient前置知识:BackupRegistry备用注册中心、HealthCheckHandler健康检查处理器...
原力计划

上篇文章介绍了`DiscoveryClient`服务注册时使用到的一个小工具`InstanceInfoReplicator`,其实它也属于前置知识。本文继续此部分的内容,为详细了解Eureka Client端最重要API `DiscoveryClient`做好铺陈。 这么做的目的是想说:直接面对...

2020-04-08 09:24:51 437 0

原创 [享学Eureka] 二十二、DiscoveryClient服务注册的小工具:InstanceInfoReplicator
原力计划

`DiscoveryClient`作为服务发现客户端,提供服务注册功能是其核心能力之一。在进行Register服务注册的时候,最终目的就是把本实例`InstanceInfo`发送给Eureka Server服务端。看似比较简单,但想作成一个产品级的功能还是有众多因素需要考虑的:周期性执行、数据准确...

2020-04-07 20:55:58 494 0

原创 [享学Eureka] 二十一、LookupService服务发现之客户端实现:EurekaClient接口
原力计划

`Eureka`作为一个注册中心,核心功能可概括为两个:服务注册和服务发现/服务查找。它属于C-S架构,服务注册属于Server端提供的能力,而服务查找它贯穿于服务端及客户端均有,它们的公用抽象接口是`LookupService`。 本文以及接下来几篇文章会讲解客户端对服务查找的实现:通过请求服...

2020-04-07 10:14:24 528 0

原创 [享学Eureka] 二十、远程通信模块:EurekaHttpClients工具快速构建EurekaHttpClient请求客户端
原力计划

上篇文章介绍了使用`EurekaHttpClients`可以快速创建`ClusterResolver`集群解析器,但是相关方法均为私有的,并不可直接访问(`newBootstrapResolver()`除外)。主要原因是Eureka并不希望你直接访问它(也没这种必要),这些方法仅为构建一个`Eur...

2020-04-06 23:02:40 447 0

原创 [享学Eureka] 十九、远程通信模块:EurekaHttpClients工具快速构建ClusterResolver集群解析器
原力计划

前面用多篇文章详细介绍了远程通信模块中`EurekaHttpClient`的实现,含Low-Level以及Top-Level的各种实现。那么面对这么多的底层or高层实现,如何快速组合得到一个最终可用的、具有产品级功能的远程通信Client客户端呢?Eureka为了简化这个操作,提供了`Eureka...

2020-04-06 16:15:08 397 0

原创 [享学Eureka] 十八、远程通信模块:结合代码示例详解transport.retryableClientQuarantineRefreshPercentage配置项
原力计划

上篇文章从源码处了解到了`RetryableEurekaHttpClient`的工作原理,作为`EurekaHttpClient`高级别实现中最重要的一个,本文将用代码来演示它的使用,达到巩固理解以及能够深入了解Eureka内部机制的目的。 另外一个重点是介绍它的`transport.retry...

2020-04-05 21:51:12 586 0

原创 [享学Eureka] 十七、远程通信模块:RetryableEurekaHttpClient高可用Client端的重试机制
原力计划

接着上文的节奏,本文来到`EurekaHttpClient`的top-level实现中最后一个,也是最为重要的一个实现:`RetryableEurekaHttpClient`,它用于保证Client端的高可用。 如果你了解了Hystrix、Ribbon、Hystrix等组件你会发现,它们都会有涉...

2020-04-05 18:00:40 407 0

原创 [享学Eureka] 十六、远程通信模块:Top Level部分之EurekaHttpClientFactory和SessionedEurekaHttpClient
原力计划

前面已有几篇文章介绍了`EurekaHttpClient`接口以及其Low-Level实现:`JerseyApplicationClient`。对于底层实现非常的干脆利落,无异于直接使用HC发送请求,正常情况下可以work得很好,但是缺乏容错性等一些产品及特性如“重试”等。 本文将介绍`Eure...

2020-04-05 10:49:24 464 0

原创 [享学Eureka] 十五、集群解析器ClusterResolver(四):AsyncResolver异步解析器
原力计划

接着上文的内容,本文继续介绍另外一个非常重要的包装器模式的`ClusterResolver`实现类:`AsyncResolver`。字面意思:它是一个异步解析器,但其实却又不是传统意义上的异步的意思,那到底意寓如何,本文将作出解释说明。 关于`ClusterResolver`已经持续用了好几篇文...

2020-04-04 16:52:54 391 0

原创 [享学Eureka] 十四、集群解析器ClusterResolver(三):ZoneAffinityClusterResolver区域感知解析器
原力计划

前两篇对`ClusterResolver`以及其几个**独立子类**进行了讲解,本文继续。从本文起将介绍其**装饰者模式**的几个子类,它的最大特点是:可以装饰任意一个`ClusterResolver`解析器,在其基础上包装/扩展上对应功能。 装饰者模式有个非常显著的特点:它对目标进行“包裹”,...

2020-04-04 15:05:34 373 0

原创 [享学Eureka] 十三、集群解析器ClusterResolver(二):ApplicationsResolver和EurekaHttpResolver
原力计划

本文继续上文的内容,介绍`ClusterResolver`的其它实现如:本地集群解析器`ApplicationsResolver`。

2020-04-03 16:28:09 332 0

原创 [享学Eureka] 十二、集群解析器ClusterResolver(一):ConfigClusterResolver从配置里解析
原力计划

注册中心是在微服务体系中是最重要的基础设施之一,对高可用的要求是极高的。比如`Eureka`在生产上肯定是集群式部署,要求高一点的甚至还会采取多区域(region)、多可用区(zone)进行混合部署。 那么既然Eureka Server端部署如此“复杂”,Client端如何“配合”呢?这边是本文...

2020-04-03 10:51:42 362 0

原创 [享学Eureka] 十一、EndpointUtils工具类:从配置文件中解析出serviceUrl(非常重要)
原力计划

上篇文章介绍了Eureka一个迷人小工具`TimedSupervisorTask`:它是Eureka进行周期性任务调度如心跳、缓存刷新的基础。本文继续介绍它另外一个小工具`EndpointUtils`,不同于`TimedSupervisorTask`它是一个传统的工具类:提供一些静态方法来处理和`...

2020-04-02 22:56:16 416 0

原创 [享学Eureka] 十、简洁巧妙的小工具TimedSupervisorTask:自动调节执行间隔的周期性任务
原力计划

本文介绍Eureka里一个设计巧妙、代码简洁的迷人小工具类:`TimedSupervisorTask`。它是一个固定间隔的周期性任务(因为它自己实现了`Runnable`接口),一旦遇到**timeout超时**就会将下一次任务的执行时间**翻倍**,如果继续超时就继续翻倍,直到达到设定的上限为止...

2020-04-02 21:58:05 402 0

原创 一文搞懂Executor执行器和线程池的关系,整体介绍其任务执行/调度体系:ThreadPoolExecutor、ScheduledExecutorService
原力计划

本文进行JavaSE基础内容:Executor执行器体系的整体介绍。该文是整体框架介绍,并非局限于某一个使用的细节。由于我不止一次的被咨询说`ExecutorService`和`ScheduledExecutorService`什么区别和联系,以及`ThreadPoolExecutor`和`Thr...

2020-04-02 18:30:42 775 0

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