自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

架构师:通透,才能写出好代码!

也许当我老了,也一样写代码。不为别的,只为爱好。

  • 博客(38)
  • 资源 (1)
  • 收藏
  • 关注

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

Netflix OSS套件,Spring Cloud的官方推荐

2020-04-19 17:18:41 13224 13

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

一方面了解了A哥的“创作背景”;另一方面,当然也是最主要的便是我们已经初步了解了`Spring Cloud Context`工程,并且对它的`spring.factories`文件做了介绍,从中是能窥探出SC的核心组成“元素”的。天若有情天亦老,人间正道是沧桑。接下来会进入到“枯燥乏味”的修行当中,坚持下来的都是英雄。准备深入去了解Spring Cloud,`BootstrapApplicationListener`无疑是它的第一入口,然而在这之前,我们依旧需要扫除一些“障碍”。

2020-04-30 12:08:44 3403 12

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

你对Spring Framework的了解程度决定了你对Spring Boot的了解程度,你对Spring Boot的了解程度决定了你对Spring Cloud的了解程度。了解我文章的小伙伴应该知道,到目前为止A哥还几乎没有写过`Spring Boot/Spring Cloud`的文章,虽然写了不少关于`Spring Framework`的内容,但仍旧被不少小伙伴认为与时代脱节。都什么年代了,谁还会直接使用Spring Framework呢?是的没毛病

2020-04-28 21:53:31 5329 17

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

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

2020-04-27 11:25:42 9098 13

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

本文是个纯代码示例的手工活,是对前两篇文章一个很好的总结。了解A哥的风格是清楚的:理论先行,代码示例跟上加固。我们从小学就知道学习需要**多看、多想、多做(多实现)**,代码更是如此。在现在信息大爆炸时代,大多数人对“多看”做的都挺好,但是殊不知:**看和做往往是有一道银河的距离的**。所以A哥在此顺道呼吁一句:敲代码一定要多动手多动手多动手,否则你很容易只会纸上谈兵,也就容易离它渐行渐远。既然你看到了本系列文章,那么A哥就管生管养喽,本文将手把手的教你,如何纯手工控制的把Ribbon和Eureka整合

2020-04-23 09:52:55 2350 1

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

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

2020-04-23 08:07:36 2506 3

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

`Ribbon`作为客户端负载均衡器,有一个必要的基础条件就获取到`ServerList`服务器列表,以及后续的动态更新服务列表。通过前面学习知道,服务列表它可以来自**任何地方**,比如默认实现`ConfigurationBasedServerList`它表示服务列表可以来自于配置(文件)。实际生产中,我们不可能把ServerList地址写死在配置里,实际的方式是把**Ribbon同注册中心整合**从而从注册中心里获取到列表,并且动态的去sync服务列表。服务注册中心有多种,本文将讲述它和自家产品Eu

2020-04-22 23:27:21 2613

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

上篇文章主要介绍了`Archaius`和`Spring Cloud`的整合工程`spring-cloud-starter-netflix-archaius`的内容,本文将继续,会将站在**实用的角度**,深度分析`ArchaiusAutoConfiguration`该自动配置类到底做了哪些事,以及最后给出具体代码示例来体会一把Spring环境抽象`Enviroment`和`Archaius`整合的效果。你可带着疑问阅读本文:为何Ribbon、Hystrix明明是使用`Archaius`管理自己的配置,而

2020-04-18 23:15:48 2231 1

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

顺序:意思是依次而不乱。顺序在生活的方方面面都显得尤为重要,自然的它对**程序执行**来说也是至关重要的。有了顺序的保证,我们就能对“结果”做出预期,作为coder的我们对应的也就更能“掌控”自己所写代码,心里也就更加踏实。顺序固然重要,但是不乏有些场景它是不需要顺序保证的。**一般来说**:无序的效率会比顺序高,毕竟保证顺序是需要花费资源的(人力、物理、时间...)。本文将主要讨论**Spring在实例化Bean时的顺序性**,以及我们如何才能“控制”这种顺序呢?

2020-04-18 17:56:00 4413 8

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

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

2020-04-18 17:20:07 7734 5

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

Archaius是一个配置管理库,其重点是来自多个配置存储的动态属性。它包括一组用于Netflix的Java配置管理API。它主要实现为`Apache Commons Configuration`库的扩展。提供的主要功能有:1. 动态、类型属性2. 高吞吐量和线程安全的配置操作3. 一个轮询框架,允许用户获取对配置源的属性更改4. ...5. 对于愿意使用**基于约定的**属性文件位置的应用程序(以及大多数web应用程序),提供开箱即用的**复合配置**(这是强大功能之一),对于符合配置官网给了一

2020-04-16 10:52:58 3446

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

回想一下,在本系列第一篇文章就有提到过,Eureka它是使用轻量级DI框架:谷歌的Guice来管理其依赖的。通过前面这么多篇文章的学习,有理想相信亲们已经了解了Eureka几乎每个组件的作用以及**它们的依赖关系**。即使如此,但若现在要你构件其一个**完整可用**的Eureka Client客户端,你觉得呢?相信拿到这个“题目”的感觉和我是一样的:我去,这也太麻烦了吧,组件这么多,框架依赖关系还一层一层的错综复杂,难点并不是因为它困难,而是很麻烦。是的,这是每一个稍大型软件均会遇见的难题:类/组件多了

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

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

上坡的路都是累的设置难受的,要控制好自己的情绪。–> 返回专栏总目录 <–代码下载地址:https://github.com/f641385712/netflix-learning目录前言正文详解String#intern()源码(native代码)参阅代码示例总结前言继上篇文章分享了Eureka内置的一个小工具RateLimiter限流器后,本文继续分享其另外一个实用小...

2020-04-15 16:28:35 1202

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

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

2020-04-14 08:09:26 1769

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

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

2020-04-12 23:43:51 1469

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

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

2020-04-12 16:46:44 1151

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

在通过前面几篇文章介绍`DiscoveryClient`后,对它的核心内容已经有了较为深入的理解,此刻你基本可以放心的对自己说:对Eureka(client端)已经了解到了7、8成了。但作为一个有态度、有追求的程序员,我们可以更优秀。本文将结合前几篇所述内容作为铺垫,深入挖掘`DiscoveryClient`初始化过程中几个大步骤的细节,进入精雕细琢阶段,包括它对“众多”任务的组织和启动,掌握其要领方得安心。

2020-04-12 16:19:44 1811 2

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

DiscoveryClient中有两个非常重要的内部类:`HeartbeatThread`和`CacheRefreshThread`,他俩是调度任务中真正干活的两个**任务类**,因此单摘出来放在一起讲述一把,防止迷路。另外,前面有篇文章专门介绍了实例复制器`InstanceInfoReplicator`,它也用于周期性对当前实例进行注册。那么你是否疑问:它和`HeartbeatThread`有什么区别和联系呢?本文也会进行对比

2020-04-12 14:20:27 1310

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

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

2020-04-11 23:20:35 1540

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

Eureka属于c-s的设计模式,Client端本地需要维护一份注册表信息,因此它需要周期性的去远程Server端获取,这种获取注册表的方式有两种:**全量获取和增量获取**。全量获取:顾名思义,**大而全**是它的特点,通信上属于一种相对较重的操作。增量获取:每次仅获取**发生了变化的数据**,通信轻量,但缺点是落地逻辑复杂,需要client + server端共同协作实现。本文将先重点介绍全量获取的实现。

2020-04-11 22:37:23 1900

原创 IntelliJ IDEA 2020.1发布,你要的都在这!

千呼万唤始出来。自从官方在2020-01-20发布了其**2020年的Roadmap**,我便持续关注着、期待着它“新10年”的首个版本的发布,这不就在**昨天(2020-04-09)**发布了其“新10年”的首个版本:`IntelliJ IDEA 2020.1`。按照国际惯例,作为大版本号的升级,一般都会“搞点事情”,而事实确实如此(包括了支持中文哦)。

2020-04-11 08:45:13 40693 172

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

主要介绍了`DiscoveryClient`的成员属性,达30+个之多。我们发现其成员属性中,绝大多数否是final修饰,也就是说他们大多均得在`DiscoveryClient`初始化阶段完成赋值,由此你也能感受到它初始化的“压力”。确实,`DiscoveryClient`的初始化阶段是它,**甚至是整个Eureka Client**最为重要的逻辑片段之一,属于掌握Eureka一定、必须精通的知识点。在上文已经了解了它的成员属性以及含义后,本文在其基础上继续深入,深入讲解`DiscoveryClient

2020-04-08 23:54:33 2449

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

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

2020-04-08 10:31:58 1404

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

上篇文章介绍了`DiscoveryClient`服务注册时使用到的一个小工具`InstanceInfoReplicator`,其实它也属于前置知识。本文继续此部分的内容,为详细了解Eureka Client端最重要API `DiscoveryClient`做好铺陈。这么做的目的是想说:直接面对一个庞然大物是有“恐惧”的,然而流行框架的优点是它一般都具有良好的“模块化”设计,因此我们便可针对每个相对较小的模块逐个击破之,最后再知识整合即可。

2020-04-08 09:24:51 1251

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

`DiscoveryClient`作为服务发现客户端,提供服务注册功能是其核心能力之一。在进行Register服务注册的时候,最终目的就是把本实例`InstanceInfo`发送给Eureka Server服务端。看似比较简单,但想作成一个产品级的功能还是有众多因素需要考虑的:周期性执行、数据准确性、自动执行、手动触发、并发、限流等,这些因素均可能影响着注册上去数据的准确性,因此有必要考虑在内。为了集中解决这些小问题,Eureka提供了一个为服务注册小工具:`InstanceInfoReplicator

2020-04-07 20:55:58 1593

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

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

2020-04-07 10:14:24 1481

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

上篇文章介绍了使用`EurekaHttpClients`可以快速创建`ClusterResolver`集群解析器,但是相关方法均为私有的,并不可直接访问(`newBootstrapResolver()`除外)。主要原因是Eureka并不希望你直接访问它(也没这种必要),这些方法仅为构建一个`EurekaHttpClient`实例来提供支持即可,这便是本文内容。本文将结合具体的实例代码,全面介绍`EurekaHttpClients`的使用方式。

2020-04-06 23:02:40 1031

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

前面用多篇文章详细介绍了远程通信模块中`EurekaHttpClient`的实现,含Low-Level以及Top-Level的各种实现。那么面对这么多的底层or高层实现,如何快速组合得到一个最终可用的、具有产品级功能的远程通信Client客户端呢?Eureka为了简化这个操作,提供了`EurekaHttpClients`工具对常用典型场景做了快速处理,这边是将下来要讲解的主要内容。

2020-04-06 16:15:08 873

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

上篇文章从源码处了解到了`RetryableEurekaHttpClient`的工作原理,作为`EurekaHttpClient`高级别实现中最重要的一个,本文将用代码来演示它的使用,达到巩固理解以及能够深入了解Eureka内部机制的目的。另外一个重点是介绍它的`transport.retryableClientQuarantineRefreshPercentage`这个配置项,因为有一句话叫:只要了解了此配置项,肯定就了解了`RetryableEurekaHttpClient`。

2020-04-05 21:51:12 1051

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

接着上文的节奏,本文来到`EurekaHttpClient`的top-level实现中最后一个,也是最为重要的一个实现:`RetryableEurekaHttpClient`,它用于保证Client端的高可用。如果你了解了Hystrix、Ribbon、Hystrix等组件你会发现,它们都会有涉及到重试的相关知识点。因为业内基本有这么一个共识:只要涉及到远程通信必有Retry重试,而作为C-S模式的实现,`Eureka`更是不例外。

2020-04-05 18:00:40 1011

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

前面已有几篇文章介绍了`EurekaHttpClient`接口以及其Low-Level实现:`JerseyApplicationClient`。对于底层实现非常的干脆利落,无异于直接使用HC发送请求,正常情况下可以work得很好,但是缺乏容错性等一些产品及特性如“重试”等。本文将介绍`EurekaHttpClient`的Top-Level部分,它**在Low-Level部分的基础上**包裹上一些产品及的功能,以能提高容错性,达到高可用的目的。实际生产中不可能直接使用Low-Level的实现,而是使用经过

2020-04-05 10:49:24 1043

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

接着上文的内容,本文继续介绍另外一个非常重要的包装器模式的`ClusterResolver`实现类:`AsyncResolver`。字面意思:它是一个异步解析器,但其实却又不是传统意义上的异步的意思,那到底意寓如何,本文将作出解释说明。关于`ClusterResolver`已经持续用了好几篇文章,本文是它的最后一篇。`ClusterResolver`对理解高可用集群的搭建非常重要,因此若你近期想尝试Eureka的高可用建设,需要深入了解一波。

2020-04-04 16:52:54 962

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

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

2020-04-04 15:05:34 883

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

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

2020-04-03 16:28:09 799

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

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

2020-04-03 10:51:42 1333

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

上篇文章介绍了Eureka一个迷人小工具`TimedSupervisorTask`:它是Eureka进行周期性任务调度如心跳、缓存刷新的基础。本文继续介绍它另外一个小工具`EndpointUtils`,不同于`TimedSupervisorTask`它是一个传统的工具类:提供一些静态方法来处理和`Eureka`端点`EurekaEndpoint`相关的工作。本工具类提供(从配置文件里)解析出`DiscoveryClient`使用的`ServiceUrl`的工具方法,这些处理规则对你了解**Eureka是

2020-04-02 22:56:16 1105 1

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

本文介绍Eureka里一个设计巧妙、代码简洁的迷人小工具类:`TimedSupervisorTask`。它是一个固定间隔的周期性任务(因为它自己实现了`Runnable`接口),一旦遇到**timeout超时**就会将下一次任务的执行时间**翻倍**,如果继续超时就继续翻倍,直到达到设定的上限为止(达到上限后就是固定时间间隔了),周而复始。因为它实现简单,但达到的效果却很好,被广泛运用在Eureka的各种定时任务里,因此本文予以介绍学习。

2020-04-02 21:58:05 1939

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

本文进行JavaSE基础内容:Executor执行器体系的整体介绍。该文是整体框架介绍,并非局限于某一个使用的细节。由于我不止一次的被咨询说`ExecutorService`和`ScheduledExecutorService`什么区别和联系,以及`ThreadPoolExecutor`和`ThreadPoolTaskExecutor`有什么不一样之类的问题,因此决定写此文科普一下。本文内容不深,但比较全,因此我相信绝对是你值得阅读的一篇文章(即使你可能已经工作了5年+)。

2020-04-02 18:30:42 3476

YourBatman的端午节祝福:代码雨可执行jar包

一年一度的端午节到了,基于Java的AWT写了一个“代码雨”,寄托笔者对大家的祝福,这是可执行jar包,下载下来直接执行"java -jar codeRainApp.jar"即可运行看到效果

2022-06-03

空空如也

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

TA关注的人

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