自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(206)
  • 资源 (1)
  • 收藏
  • 关注

原创 Consul服务注册与发现机制

1、什么是服务注册中心?顾名思义,假设你有一个分布式系统,里面包含了多个服务,部署在不同的机器上,然后这些不同机器上的服务之间要互相调用。举个现实点的例子吧,比如电商系统里的订单服务需要调用库存服务,如下图所示。现在的问题在于,订单服务在192.168.31.154这台机器上,库存服务在192.137.1.33这台机器上。现在订单服务是想要调用库存服务,但是他并不知道库存服务在哪台机器上啊!毕竟人家都是在不同机器上的。所以这个时候就需要服务注册中心出场了,这个时候你的系统架构中需要引

2020-06-28 07:07:12 1616 2

原创 基于Consul的分布式锁实现

我们在构建分布式系统的时候,经常需要控制对共享资源的互斥访问。这个时候我们就涉及到分布式锁(也称为全局锁)的实现,基于目前的各种工具,我们已经有了大量的实现方式,比如:基于Redis的实现、基于Zookeeper的实现。本文将介绍一种基于Consul 的Key/Value存储来实现分布式锁以及信号量的方法。分布式锁实现基于Consul的分布式锁主要利用Key/Value存储API中的acquire和release操作来实现。acquire和release操作是类似Check-And-Set的操作:

2020-06-27 19:17:10 339

原创 基于Consul的分布式信号量实现

本文将继续讨论基于Consul的分布式锁实现。信号量是我们在实现并发控制时会经常使用的手段,主要用来限制同时并发线程或进程的数量,比如:Zuul默认情况下就使用信号量来限制每个路由的并发数,以实现不同路由间的资源隔离。信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线程必须释放信号量。其它想进入该关键代码段的线程必须等待直到第一个线程释放信号量

2020-06-27 19:10:48 220

原创 Consul注销实例时候的问题

当我们在Spring Cloud应用中使用Consul来实现服务治理时,由于Consul不会自动将不可用的服务实例注销掉(deregister),这使得在实际使用过程中,可能因为一些操作失误、环境变更等原因让Consul中存在一些无效实例信息,而这些实例在Consul中会长期存在,并处于断开状态。它们虽然不会影响到正常的服务消费过程,但是它们会干扰我们的监控,所以我们可以实现一个清理接口,在确认故障实例可以清理的时候进行调用来将这些无效信息清理掉。开始以为只要简单的调用注销接口就能轻松完成,但是实际实践

2020-06-27 18:06:55 513

原创 Spring Cloud Finchley版中Consul多实例注册的问题处理

由于Spring Cloud对Etcd的支持一直没能从孵化器中出来,所以目前来说大多用户还在使用Eureka和Consul,之前又因为Eureka 2.0不在开源的消息,外加一些博眼球的标题党媒体使得Eureka的用户有所减少,所以,相信在选择Spring Cloud的用户群体中,应该有不少用户会选择Consul来做服务注册与发现。本文就来说一下,当我们使用Spring Cloud最新的Finchley版 + Consul 1.2.x时候最严重的一个坑:多实例注册的问题。问题解读问题:该问题.

2020-06-27 17:58:42 195

原创 使用Consul做服务发现的若干姿势

从2016年起就开始接触Consul,使用的主要目的就是做服务发现,后来逐步应用于生产环境,并总结了少许使用经验。最开始使用Consul的人不多,为了方便交流创建了一个QQ群(群号在最后),这两年微服务越来越火,使用Consul的人也越来越多,目前群里已有400多人,经常有人问一些问题,比如:服务注册到节点后,其他节点为什么没有同步? Client是干什么的?(Client有什么作用?) 能不能直接注册到Server?(是否只有Server节点就够了?) 服务信息是保存在哪里的? 如果节点挂了健

2020-06-27 14:44:48 801

原创 Spring Cloud微服务架构:服务注册与发现(Nacos)

自Spring Cloud Alibaba发布第一个Release以来,就备受国内开发者的高度关注。虽然Spring Cloud Alibaba还没能纳入Spring Cloud的主版本管理中,但是凭借阿里中间件团队的背景,还是得到不少团队的支持;同时,由于Spring Cloud Alibaba中的几项主要功能都直指Netflix OSS中的重要组件,而后者最近频繁宣布各组件不在更新新特性,这使得Spring Cloud Alibaba关注度不断飙升,不少开发者或团队也开始小范围试水。下面开始进入主题:

2020-06-27 14:26:00 549

原创 Spring Cloud微服务架构:服务注册与发现(Eureka、Consul)

Spring Cloud简介Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。Spring Cloud包含了多个子项目(针对分布式系统中涉及的多个不同开源产品),比如:Spring Cloud Config、Spring Cloud Netflix、Spring Cloud0 CloudFoundry、Spri

2020-06-27 13:54:43 145

原创 Spring Cloud之Eureka服务注册与发现源码

为了更深入的理解Eureka的运作和配置,下面我们结合源码来分别看看服务端和客户端的通信行为是如何实现的。首先,服务注册中心、服务提供者、服务消费者这三个主要元素来说,后两者(也就是Eureka客户端)在整个运行机制中是大部分通信行为的主动发起者,而注册中心主要是处理请求的接收者。所以,我们可以从Eureka的客户端作为入口看看它是如何完成这些主动通信行为的。我们在将一个普通的Spring Boot应用注册到Eureka Server中,或是从Eureka Server中获取服务列表时,主要就做了两

2020-06-27 04:53:49 377

原创 Spring Cloud之服务注册与发现机制

一、复杂与简单并存1、背景:到底是复杂好还是简单好,这是一个没有答案的问题,也是一个哲学问题。见仁见智啦。事物整体肯定是向复杂化方向发展,但是向人们呈现时应尽量简单化。用一句话来说就是:功能复杂化,使用简单化。因为人们的要求越来越高,所以功能肯定越来越复杂。又因为要获得更好的用户体验,所以使用方式应该越来越简单。因此对用户隐藏复杂性是一个需要专门考虑的事情。这个事情一直在进行中,而且效果还不错。下面请看一些例子:(1)、IP很难记忆,于是引入了域名。网上资源很难查找,于是有了搜索引擎。手动挡.

2020-06-27 03:24:51 912 1

原创 Eureka高可用之Eureka Server复制机制:PeerAwareInstanceRegistryImpl

还是先提出几个疑问,看本篇文章前最好看过Eureka高可用之Client重试机制:RetryableEurekaHttpClient,要知道Eureka Client只会向一个Server节点进行注册(心跳、状态改变等类似),注册失败时才会尝试下一个server节点。当然正是由于这种机制,才会有Eureka Server的复制行为,个人认为,Eureka Client向每个Eureka Server都发送注册、心跳等事件,会更好的保证一致性1、如果有4个Eureka Server集群节点,一个Clien

2020-06-26 15:03:47 333

原创 Eureka高可用之Client重试机制:RetryableEurekaHttpClient

下面有几个疑问是我看源码时问自己的,先提出来,希望看这篇文章的人带着疑问去读,然后初步介绍下EurekaHttpClient体系,后面会详细讲RetryableEurekaHttpClient1、Eureka Client如何向Eureka Server集群注册?如果我的Client端的ServiceUrl配置了多个Eureka Service地址,那么Client是否会向每一个Server发起注册?2、Eureka Server具有复制行为,即向其他Eureka Server节点复制自身的实例信

2020-06-26 14:33:28 953

原创 Spring Cloud 事件总线 Consul 入门

1. 概述在《Consul 极简入门》文章中,我们一起完成了 Consul 的学习,并完成了 Consul 服务器的搭建。本文我们来学习Spring Cloud Consul提供的spring-cloud-consul-binder组件,基于Spring Cloud Bus的编程模型,接入 Consul 提供的Event特性,实现事件总线的功能。Spring Cloud Bus 是事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud C...

2020-06-25 22:53:49 1106

原创 Spring Cloud 配置中心 Consul 入门

1. 概述在《Consul 极简入门》文章中,我们一起完成了 Consul 的学习,并完成了 Consul 服务器的搭建。本文我们来学习Spring Cloud Consul提供的spring-cloud-consul-config组件,接入 Consul 作为配置中心,实现服务的统一配置管理。2. 快速入门示例代码对应仓库:labx-28-sc-consul-config-demo。本小节,我们会在 Consul 服务中定义配置,并使用@ConfigurationProp...

2020-06-25 22:37:51 677

原创 Spring Cloud 注册中心 Consul 入门

1. 概述在《Consul 极简入门》文章中,我们一起完成了 Consul 的学习,并完成了 Consul 服务器的搭建。本文我们来学习Spring Cloud Consul提供的spring-cloud-consul-discovery组件,基于 Spring Cloud 的编程模型,接入 Consul 作为注册中心,实现服务的注册与发现。2. 注册中心原理在开始搭建 Consul Discovery 的示例之前,我们先来简单了解下注册中心的原理。在使用注册中心时,一共有三种角...

2020-06-25 19:01:58 236

原创 Consul 极简入门

1. 概述Consul是由 HashiCorp 基于 Go 语言实现的开源项目,可用于分布式系统的注册中心和配置中心的功能。旁白君:Consul 目前已经提供完整的Service Mesh 服务网格的能力,不过我们可以暂时先忽略。更多的关注,将 Consul 作为注册中心和配置中心。1.1 核心功能对应官方文档地址:https://www.consul.io/introConsul 的核心功能如下:①服务发现(Service Discovery):Consul 提供了...

2020-06-25 18:39:31 586

原创 Spring-Cloud-Gateway 源码解析 —— 网关管理 HTTP API

1. 概述本文主要分享网关管理 HTTP API。org.springframework.cloud.gateway.actuate.GatewayWebfluxEndpoint,提供管理网关的 HTTP API 。构造方法,代码如下:@RestController@RequestMapping("${management.context-path:/application}/gateway")public class GatewayWebfluxEndpoint implements .

2020-06-24 00:18:59 255

原创 Spring-Cloud-Gateway 源码解析 —— 过滤器 (4.10) 之 RequestRateLimiterGatewayFilterFactory 请求限流

1. 概述本文主要分享RequestRateLimiterGatewayFilterFactory 的代码实现。在《Spring-Cloud-Gateway 源码解析 —— 过滤器 (4.2) 之 GatewayFilterFactory 过滤器工厂》一文中,我们看到 Spring Cloud Gateway 提供了多种 GatewayFilterFactory 的实现,而 RequestRateLimiterGatewayFilterFactory 也是其中的一种。通过 RequestR...

2020-06-24 00:15:10 3787

原创 Spring-Cloud-Gateway 源码解析 —— 过滤器 (4.9) 之 HystrixGatewayFilterFactory 熔断

1. 概述本文主要分享HystrixGatewayFilterFactory 的代码实现。在《Spring-Cloud-Gateway 源码解析 —— 过滤器 (4.2) 之 GatewayFilterFactory 过滤器工厂》一文中,我们看到 Spring Cloud Gateway 提供了多种 GatewayFilterFactory 的实现,而 HystrixGatewayFilterFactory 也是其中的一种。通过 HystrixGatewayFilterFactory ,可...

2020-06-24 00:03:15 2405

原创 Spring-Cloud-Gateway 源码解析 —— 过滤器 (4.8) 之 WebClientHttpRoutingFilter

1. 概述本文主要分享WebClientHttpRoutingFilter 的代码实现。WebClientHttpRoutingFilter ,Http路由网关过滤器。其根据http://或https://前缀( Scheme )过滤处理,使用基于org.springframework.cloud.gateway.filter.WebClient实现的 HttpClient 请求后端 Http 服务。WebClientWriteResponseFilter ,与 WebClien...

2020-06-23 23:59:18 1835

原创 Spring-Cloud-Gateway 源码解析 —— 过滤器 (4.7) 之 NettyRoutingFilter

1. 概述本文主要分享NettyRoutingFilter 的代码实现。NettyRoutingFilter ,Netty路由网关过滤器。其根据http://或https://前缀( Scheme )过滤处理,使用基于 Netty 实现的 HttpClient 请求后端 Http 服务。NettyWriteResponseFilter ,与 NettyRoutingFilter成对使用的网关过滤器。其将 NettyRoutingFilter 请求后端 Http 服务的响应写回客户端...

2020-06-23 23:55:26 3776

原创 Spring-Cloud-Gateway 源码解析 —— 过滤器 (4.6) 之 WebSocketRoutingFilter

1. 概述本文主要分享WebsocketRoutingFilter 的代码实现。WebsocketRoutingFilter ,Websocket路由网关过滤器。其根据ws:///wss://前缀( Scheme )过滤处理,代理后端 Websocket 服务,提供给客户端连接。如下图 :目前一个RouteDefinition 只能指定一个后端 WebSocket 服务。官方正在计划在 LoadBalancerClientFilter 上实现 Websocket 的负载均衡功能...

2020-06-23 23:50:52 3121 2

原创 Spring-Cloud-Gateway 源码解析 —— 过滤器 (4.5) 之 ForwardRoutingFilter

1. 概述本文主要分享ForwardRoutingFilter 的代码实现。RouteToRequestUrlFilter ,转发路由网关过滤器。其根据forward://前缀( Scheme )过滤处理,将请求转发到当前网关实例本地接口。举个例子,配置 RouteDefinition 路由定义如下 :spring: application: name: juejin-gateway cloud: gateway: routes: ...

2020-06-23 23:45:22 1885

原创 Spring-Cloud-Gateway 源码解析 —— 过滤器 (4.4) 之 LoadBalancerClientFilter 负载均衡

1. 概述本文主要分享LoadBalancerClientFilter 的代码实现。LoadBalancerClientFilter 根据lb://前缀过滤处理,使用serviceId选择一个服务实例,从而实现负载均衡。2. 环境搭建在《Spring-Cloud-Gateway 源码解析 —— 路由(1.4)之 DiscoveryClientRouteDefinitionLocator 注册中心》「2. 环境搭建」有详细教程。3. LoadBalancerClientFil...

2020-06-23 23:42:40 2106

原创 Spring-Cloud-Gateway 源码解析 —— 过滤器 (4.3) 之 RouteToRequestUrlFilter

1. 概述本文主要分享RouteToRequestUrlFilter 的代码实现。RouteToRequestUrlFilter 根据匹配的 Route ,计算请求的地址。注意,这里的地址指的是 URL ,而不是 URI。???? RouteToRequestUrlFilter 的代码十分少,所以这会是一篇简单的文章。2. RouteToRequestUrlFilterorg.springframework.cloud.gateway.filter.RouteToRequestUrlFi

2020-06-23 23:40:35 2025

原创 Spring-Cloud-Gateway 源码解析 —— 过滤器 (4.2) 之 GatewayFilterFactory 过滤器工厂

1. 概述本文主要分享GatewayFilterFactory 的实现类。GatewayFilterFactory 实现类较多,根据用途整理如下脑图 :下面我们开始逐块解析源码实现。2. Header本小节分享 Header 相关的 GatewayFilterFactory 实现类。2.1 AddRequestHeaderGatewayFilterFactory用途 :添加指定请求 Header 为指定值。 配置 : spring: cloud: g.

2020-06-23 23:38:50 748

原创 Spring-Cloud-Gateway 源码解析 —— 过滤器 (4.1) 之 GatewayFilter 一览

1. 概述本文主要对过滤器 GatewayFilter 做整体的认识。过滤器整体类图如下 :是不是有点疑惑 GlobalFilter 与 GatewayFilter 的关系 ?且见本文分晓。2. GatewyFilterorg.springframework.cloud.gateway.filter.GatewayFilter,网关过滤器接口,代码如下 :public interface GatewayFilter { /** * Process the Web r..

2020-06-23 23:33:30 923

原创 Spring-Cloud-Gateway 源码解析 —— 处理器 (3.3) 之 FilteringWebHandler 创建过滤器链

1. 概述本文主要分享FilteringWebHandler。在《Spring-Cloud-Gateway 源码解析 —— 处理器 (3.2) 之 RoutePredicateHandlerMapping 路由匹配 》「2.1 SimpleHandlerAdapter」里,我们看到SimpleHandlerAdapter#handle(ServerWebExchange, Object)调用FilteringWebHandler#handle(ServerWebExchange)方法,...

2020-06-23 23:29:33 1103

原创 Spring-Cloud-Gateway 源码解析 —— 处理器 (3.2) 之 RoutePredicateHandlerMapping 路由匹配

1. 概述本文主要分享RoutePredicateHandlerMapping 路由匹配。我们先一起来看看,一个请求是怎么被 Spring Cloud Gateway 处理的,如下图 :org.springframework.web.reactive.DispatcherHandler:接收到请求,匹配 HandlerMapping ,此处会匹配到 RoutePredicateHandlerMapping 。 org.springframework.cloud.gateway.hand..

2020-06-23 23:27:48 1982

原创 Spring-Cloud-Gateway 源码解析 —— 处理器 (3.1) 之 RoutePredicateFactory 路由谓语工厂

1. 概述本文主要分享RoutePredicateFactory 路由谓语工厂。RoutePredicateFactory 涉及到的类在org.springframework.cloud.gateway.handler.predicate包下,如下图 :Spring Cloud Gateway 创建 Route 对象时,使用 RoutePredicateFactory 创建 Predicate 对象。Predicate 对象可以赋值给Route.predicate属性,用于匹配请求...

2020-06-22 23:58:38 803

原创 Spring-Cloud-Gateway 源码解析 —— 路由(2.4)之 Kotlin 自定义 RouteLocator

1. 概述本文主要分享如何使用 Kotlin 实现自定义 RouteLocator。???? 由于笔者暂时不了解 Kotlin ,也比较懒,暂时不准备了解 Kotlin ,所以本文很大可能性是"一本正经的胡说八道"。2. RouteLocatorDslorg.springframework.cloud.gateway.route.RouteLocatorDsl,使用 Kotlin 实现自定义 RouteLocator 。我们先打开GatewayDsl.kt,大体浏览一下。下面我们来看..

2020-06-22 23:56:19 356

原创 Spring-Cloud-Gateway 源码解析 —— 路由(2.3)之 Java 自定义 RouteLocator

1. 概述本文主要分享如何使用 Java 实现自定义 RouteLocator。ps :为什么这里强调 Java 呢?可以使用 Kotlin 实现自定义 RouteLocator ,在下一篇文章我们会详细分享。首先我们来看一段示例程序,代码如下 :import static org.springframework.cloud.gateway.filter.factory.GatewayFilters.addResponseHeader;import static org.springfr

2020-06-22 23:54:51 1228

原创 Spring-Cloud-Gateway 源码解析 —— 路由(2.2)之 RouteDefinitionRouteLocator 路由配置

1. 概述本文主要分享RouteDefinitionRouteLocator 的源码实现。蓝色部分 :RouteDefinitionRouteLocator 。2. RouteDefinitionRouteLocatororg.springframework.cloud.gateway.route.RouteDefinitionRouteLocator,基于RouteDefinitionLocator的 RouteLocator实现类。RouteDefinitionRoute...

2020-06-22 23:53:02 3195

原创 Spring-Cloud-Gateway 源码解析 —— 路由(2.1)之 RouteLocator 一览

1. 概述本文主要对路由定位器 RouteLocator 做整体的认识。在《Spring-Cloud-Gateway 源码解析 —— 路由(1.1)之 RouteDefinitionLocator 一览》中,我们对 RouteLocator 对了简单的介绍 : RouteLocator 可以直接自定义路由(org.springframework.cloud.gateway.route.Route) ,也可以通过 RouteDefinitionRouteLocator 获取 Route...

2020-06-22 23:50:40 959

原创 Spring-Cloud-Gateway 源码解析 —— 路由(1.4)之 DiscoveryClientRouteDefinitionLocator 注册中心

1. 概述本文主要对DiscoveryClientRouteDefinitionLocator 的源码实现。DiscoveryClientRouteDefinitionLocator 通过调用org.springframework.cloud.client.discovery.DiscoveryClient获取注册在注册中心的服务列表,生成对应的 RouteDefinition 数组。2. 环境搭建在解析源码之前,我们先以 Eureka 为注册中心,讲解下如何配置 DiscoveryC...

2020-06-22 23:47:09 1419

原创 Spring-Cloud-Gateway 源码解析 —— 路由(1.3)之 RouteDefinitionRepository 存储器

1. 概述本文主要对RouteDefinitionRepository 的源码实现。蓝色部分 :RouteDefinitionRepository 。本文涉及到的类图如下 :下面我们来逐个类进行解析。2. RouteDefinitionWriterorg.springframework.cloud.gateway.route.RouteDefinitionWriter,路由配置写入接口。该接口定义了保存与删除两个方法,代码如下 :public interface ...

2020-06-22 23:44:23 6275 3

原创 Spring Cloud Netflix 网关 Zuul 入门

1. 概述Zuul是由 Netflix 开源的微服务网关,提供都动态路由、监控、熔断、安全等等功能。Zuul is a gateway service that provides dynamic routing, monitoring, resiliency, security, and more.Spring Cloud Netflix Zuul将 Zuul 融入 Spring Cloud 生态体系,作为 Spring Cloud 微服务架构中的 API 网关。如下图所示:拓..

2020-06-22 07:09:34 575

原创 Spring-Cloud-Gateway 源码解析 —— 路由(1.2)之 PropertiesRouteDefinitionLocator 配置文件

1. 概述本文主要对PropertiesRouteDefinitionLocator 的源码实现。蓝色部分 :PropertiesRouteDefinitionLocator 。2. PropertiesRouteDefinitionLocatororg.springframework.cloud.gateway.config.PropertiesRouteDefinitionLocator,从配置文件( 例如,YML / Properties 等 ) 读取路由配置。代码如下 :..

2020-06-21 20:52:34 1583

原创 Spring-Cloud-Gateway 源码解析 —— 路由(1.1)之 RouteDefinitionLocator 一览

1. 概述本文主要对路由定义定位器 RouteDefinitionLocator 做整体的认识。在《Spring-Cloud-Gateway 源码解析 —— 网关初始化》中,我们看到路由相关的组件 RouteDefinitionLocator / RouteLocator 的初始化。涉及到的类比较多,我们用下图重新梳理下 :RouteDefinitionLocator负责读取路由配置(org.springframework.cloud.gateway.route.RouteDefi...

2020-06-21 20:49:08 970

原创 Spring-Cloud-Gateway 源码解析 —— 核心组件构建原理

引言在当下学习和使用 spring cloud 技术栈的热潮中,网关已经成了不可或缺的内容。开发者在选择用来解决特定领域内问题的框架时,多了解几款相关同类产品可加大选择余地。除了 Netflix 的 zuul 之外,spring cloud gateway 可作为开发者的另一个选择。Zuul 分 1.x 和 2.x 版本。Zuul 2.x 版本和 spring cloud gateway 都使用 Non-Blocking I/O 模型。本文主要从源码上介绍 spring cloud gate

2020-06-21 20:43:12 716

linux实用命令集.txt

自己在工作中的一些总结,包括了使用工具,Java技术,数据库安装

2019-07-16

空空如也

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

TA关注的人

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