- 博客(34)
- 收藏
- 关注
转载 Spring Cloud中,如何解决Feign/Ribbon第一次请求失败的问题?
Spring Cloud中,Feign和Ribbon在整合了Hystrix后,可能会出现首次调用失败的问题,要如何解决该问题呢?TIPS本文于2019-01-10更新,基于Spring Cloud Finchley。造成该问题的原因Hystrix默认的超时时间是1秒,如果超过这个时间尚未响应,将会进入fallback代码。而首次请求往往会比较慢(由于Ribbon是懒加载的,在首次请求时,才会开始初始化相关类),这个响应时间可能就大于1秒了。知道原因后,我们来总结一下解决方案。以feign
2020-07-03 10:34:32
236
转载 如何使用Feign构造多参数的请求
TIPS本文基于Spring Cloud Greenwich SR1,理论上支持Finchley及更高版本。本节来探讨如何使用Feign构造多参数的请求。笔者以GET及POST请求为例讲解,其他方式(例如DELETE、PUT等)的请求原理相通,读者可自行研究。GET请求多参数的URL假设需请求的URL包含多个参数,例如http://microservice-provider-user/get?id=1&username=张三,该如何使用Feign构造呢?我们知道,Sprin..
2020-07-03 10:33:25
243
转载 跟我学Spring Cloud(Finchley版)番外-01-Eureka安全详解
前文的示例中,Eureka Server都是允许匿名访问的,该方式一般无法满足公司在安全性上的诉求。本节来构建一个需要登录才能访问的Eureka Server。Eureka本身不具备安全认证的能力,Spring Cloud使用Spring Security为Eureka Server进行了增强。Eureka Server端改造 加依赖 1234 <dependency> <groupId>org.spring
2020-07-03 10:26:27
216
转载 理解Eureka的自我保护模式
本文我们来探讨Eureka的自我保护模式。自我保护模式是Eureka的重要特性。进入自我保护模式最直观的体现,是Eureka Server首页输出的警告,如图4-10所示。图4-10 Eureka Server自我保护模式界面默认情况下,如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将会注销该实例(默认90秒)。但是当网络分区故障发生时,微服务与Eureka Server之间无法正常通信,以上行为可能变得非常危险了——因为微服务本身其实是
2020-07-03 10:23:12
202
转载 跟我学Spring Cloud(Finchley版)-26-使用Elasticsearch作为Zipkin Server的后端存储
前文搭建的Zipkin Server是没有后端存储的——数据会存储在Zipkin的内存中。这一般不适合生产,本节来探讨如何将Zipkin中的数据持久化。Zipkin支持多种存储:内存(默认) MySQL(数据量大时,查询较为缓慢,不建议使用) Elasticsearch Cassandra(Twitter官方使用Cassandra作为Zipkin Server的存储,但国内大规模用Cassandra的公司较少,Cassandra相关文档也不多)综上,个人建议使用Elasticsearch作为
2020-07-03 10:16:16
147
转载 跟我学Spring Cloud(Finchley版)-25-Spring Cloud Sleuth与Zipkin配合使用
一个良好的监控,应该有一个人类亲和的界面,这个界面就是Zipkin。本文详细讨论Sleuth如何与Zipkin配合使用。Zipin简介Zipkin是Twitter开源的分布式跟踪系统,基于Dapper的论文设计而来。它的主要功能是收集系统的时序数据,从而追踪微服务架构的系统延时等问题。Zipkin还提供了一个非常友好的界面,帮助我们分析追踪数据。TIPSZipkin官方网站:http://zipkin.io/Zipkin Server搭建 使用https://search.mave
2020-07-03 10:14:42
126
转载 跟我学Spring Cloud(Finchley版)-24-Spring Cloud Sleuth入门
经过前文讲述,我们的微服务架构日趋完善,已可使用Spring Cloud构建一个非常健壮的系统!但假设,你的项目一旦出现问题,如何才能快速定位出来呢?一般项目上要求我们快速定位两种问题:调用发生失败,快速定位出是哪个环节出了问题。是微服务问题,还是网络? 调用慢,如何快速找到性能瓶颈?这正是调用链监控要做的事情。Spring Cloud提供Sleuth来实现调用链监控。简介Spring Cloud Sleuth为Spring Cloud提供了分布式跟踪的解决方案,它大量借用了Google
2020-07-03 10:13:58
107
转载 跟我学Spring Cloud(Finchley版)-23-Spring Cloud Config高可用
前文构建的都是单节点的Config Server,本节来讨论如何构建高可用的Config Server集群,包括Config Server的高可用依赖Git仓库的高可用以及RabbitMQ的高可用。先来讨论Git仓库的高可用。Git仓库的高可用由于配置内容存储在Git仓库中,所以要想实现Config Server的高可用,必须有一个高可用的Git仓库。有两种方式可以实现Git仓库的高可用。使用第三方Git仓库:这种方式非常简单,可使用例如GitHub、BitBucket、Gitee、Codi
2020-07-01 20:41:43
76
转载 跟我学Spring Cloud(Finchley版)-22-Spring Cloud Config-配置动态刷新
先解释下为什么突然断更半个月:正月初三 - 正月十二:父亲肺气肿住院;母亲肺炎,也要挂水,故请假照顾。 正月十四 - 正月二十:奶奶摔了一跤,突然离世…老家有守夜、办丧的习俗,请假事丧。总之,2019开局很不顺利……Anyway,今天开工,今天恢复更新。配置刷新三要素 依赖中有spring-boot-starter-actuator 添加如下配置,暴露/actuator/refresh端点: 12345 managemen.
2020-07-01 20:40:40
95
转载 跟我学Spring Cloud(Finchley版)-21-Spring Cloud Config-配置属性加解密
前文都是将配置明文存储在Git仓库中,但在实际项目中,敏感的配置属性(例如数据库账号、密码等),都应加密存储,从而提高安全性。Config Server为配置内容的加密与解密提供了支持。安装JCEJava 6 JCE地址:https://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html Java 7 JCE地址:http://www.oracle.com/technetwork/java/
2020-07-01 20:39:52
160
转载 跟我学Spring Cloud(Finchley版)-20-Spring Cloud Config-Git仓库配置详解
在跟我学Spring Cloud(Finchley版)-19-配置中心-Spring Cloud Config一节中,已实现使用Git仓库作为Config Server的后端存储,本节详细探讨如何配置Git仓库。一、占位符支持Config Server的占位符支持{application}、{profile}和{label}。示例: 123456789101112 server: port: 8080spring: appl.
2020-07-01 20:39:12
166
转载 跟我学Spring Cloud(Finchley版)-19-配置中心-Spring Cloud Config
经过前文讲解,至此,微服务架构已经日趋完善——现在已经可以做一个大型的应用了!然而,随着项目的迭代,微服务数目往往与日俱增,如何高效地管理配置成为我们必须解决的问题。本节来讨论如何使用Spring Cloud Config管理配置。为什么要使用配置中心集中管理配置。一个使用微服务架构的应用系统可能会包含成百上千个微服务,因此集中管理配置是非常有必要的; 不同环境,不同配置。例如,数据源配置在不同的环境(开发、测试、预发布、生产等)中是不同的; 运行期间可动态调整。例如,我们可根据各个微服务的负载
2020-07-01 20:38:15
102
转载 跟我学Spring Cloud(Finchley版)-18-Zuul深入
本节探讨Zuul的高级特性。TIPS:笔者已经写过很多Zuul相关的文章,对于已经写过的内容,就不再啰嗦一遍了,直接贴地址吧。过滤器详解过滤器是Zuul的核心,Zuul大多功能都是基于过滤器实现的。详见:Spring Cloud Zuul过滤器详解,文章着重探讨了Zuul过滤器的生命周期、如何自定义过滤器、如何禁用指定过滤器等。内置过滤器详解Zuul内置了很多过滤器,这些过滤器帮助我们实现各种能力,来分析一下内置过滤器有哪些,分别是干嘛的。详见:Spring Cloud内置.
2020-07-01 20:36:46
79
转载 跟我学Spring Cloud(Finchley版)-17-Zuul路由配置详解
上一节(跟我学Spring Cloud(Finchley版)-16-Zuul)中,已经实现用Zuul转发到Eureka上的微服务。默认的路由规则是:访问$ZUUL_URL/指定为服务/**会被转发到指定微服务的/**。但在实际项目中,往往需要自己定义路由规则,Zuul的路由配置非常灵活、简单,本节详细讲解Zuul的路由配置。一、自定义指定微服务的访问路径配置zuul.routes.指定微服务的serviceId = 指定路径即可。例如: 123 ...
2020-07-01 20:35:18
109
转载 跟我学Spring Cloud(Finchley版)-16-Zuul
至此,已实现基于Eureka的服务发现,基于Ribbon的负载均衡,Feign也为我们提供了很不错的远程调用能力,使用Hystrix后,高并发场景下应用也不会被别人拖死——咱们的微服务架构已经日趋完善!然而,迄今为止,只讨论了微服务之间的调用,尚没讨论如何应对外部请求。应对外部请求时,就会发现,我们的架构依然存在一些问题——为什么要使用网关不同的微服务一般会有不同的网络地址,而外部客户端(例如手机APP)可能需要调用多个服务的接口才能完成一个业务需求。例如一个电影购票的手机APP,可能会调用多个
2020-07-01 20:34:24
111
转载 跟我学Spring Cloud(Finchley版)-15-Hystrix监控详解
Hystrix提供了监控Hystrix Command的能力,本节来详细探讨。监控端点与数据应用整合Hystrix,同时应用包含spring-boot-starter-actuator依赖,就会存在一个/actuator/hystrix.stream端点,用来监控Hystrix Command。当被@HystrixCommand注解了的方法被调用时,就会产生监控信息,并暴露到该端点中。当然,该端点默认是不会暴露的,需使用如下配置将其暴露。 12345 ...
2020-07-01 20:33:30
110
转载 跟我学Spring Cloud(Finchley版)-14-Feign使用Hystrix
Feign默认已经整合了Hystrix,本节详细探讨Feign使用Hystrix的具体细节。服务降级 加配置,默认Feign是不启用Hystrix的,需要添加如下配置启用Hystrix,这样所有的Feign Client都会受到Hystrix保护! 123 feign: hystrix: enabled: true 提供Fallback: 123456789101112
2020-07-01 20:31:14
77
转载 Spring Cloud(Finchley版)-13-通用方式使用Hystrix
http://www.globalshopping.top本节详细讲解使用Hystrix的通用方式。简介Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统、服务或者第三方库,防止级联失败,从而提升系统的可用性与容错性。Hystrix主要通过以下几点实现延迟和容错。包裹请求使用HystrixCommand(或HystrixObservableCommand...
2019-11-26 18:06:29
101
转载 Spring Cloud(Finchley版)-12-微服务容错三板斧
http://www.globalshopping.top至此,我们已实现服务发现、负载均衡,同时,使用Feign也实现了良好的远程调用——我们的代码是可读、可维护的。理论上,我们现在已经能构建一个不错的分布式应用了,但微服务之间是通过网络通信的,网络可能出问题;微服务本身也不可能100%可用。如何提升应用的可用性呢?这是我们必须考虑的问题——举个例子:某大型系统中,服务A调用服务B,...
2019-11-19 10:13:29
110
转载 Spring Cloud(Finchley版)-11-Feign常见问题总结
http://www.globalshopping.topTIPS本文基于Spring Cloud Finchley编写,如需阅读更新、更全的总结文章,详见:如何使用Feign构造多参数的请求本文总结Feign常见问题及解决方案。一、FeignClient接口如使用@PathVariable,必须指定value属性代码示例: 123456 ...
2019-11-19 10:12:32
182
转载 Spring Cloud(Finchley版)-10-Feign深入
http://www.globalshopping.top上一节(跟我学Spring Cloud(Finchley版)-09-Feign)讲了Feign的入门姿势并深入对比了RestTemplate,本节来深入探讨Feign的高级特性。总的来说,Feign是一个相对简单的组件,但细节还是比较多的,一不小心就可能入坑,注意点我会以WARINING的形式标记出来,便于读者查阅。Feign配置...
2019-11-19 10:11:37
120
转载 Spring Cloud(Finchley版)-09-Feign
http://www.globalshopping.top经过前文讲解,我们已使用Eureka实现服务发现;使用Ribbon实现了负载均衡这种听起来很高端的东西。我们的架构已经初具雏形,但依然存在很多问题,下面不妨来分析下前文的代码—— 1234567891011 @GetMapping("/users/{id}")public Us...
2019-11-19 10:10:10
142
转载 Spring Cloud(Finchley版)-08-Ribbon深入
http://www.globalshopping.top上一节讲了Ribbon的入门姿势,本节深入探讨Ribbon的高级特性。内置负载均衡规则负载均衡规则是Ribbon的核心,下面来看一下Ribbon内置的负载均衡规则。AvailabilityFilteringRule:过滤掉一直连接失败的被标记为circuit tripped的后端Server,并过滤掉那些高并发的后端Serv...
2019-11-19 10:09:13
105
转载 Spring Cloud(Finchley版)-07-Ribbon入门
http://www.globalshopping.top经过前文讲述,我们已经实现了服务发现。本节来解决跟我学Spring Cloud(Finchley版)-02-构建分布式应用提到的如下问题:负载均衡如何考虑?难道得在电影微服务和用户微服务之间加个NGINX做负载均衡吗?听起来是可行的,但如果有10000+服务(这并不夸张,我司的微服务数目是这个数字乘以N,N >= m...
2019-11-15 18:32:23
106
转载 Spring Cloud(Finchley版)-06-服务注册与服务发现-Eureka深入
http://www.globalshopping.top在Spring Cloud(Finchley版)-05-服务注册与服务发现-Eureka入门一节中,已经编写了一个Eureka Server,并将服务提供者与消费者都注册到了Eureka Server上。本节,来深入探讨Eureka的高级特性。Eureka原理本节来探讨Eureka的原理。Region &...
2019-11-15 18:31:03
113
转载 Spring Cloud(Finchley版)-05-服务注册与服务发现-Eureka入门
http://www.globalshopping.top本节讲解基于Eureka的服务发现。Eureka简介Eureka是Netflix开源的服务发现组件,本身是一个基于REST的服务,包含Server和Client两部分,Spring Cloud将它集成在子项目Spring Cloud Netflix中。拓展阅读 Eureka的GitHub:https://gith...
2019-11-15 18:28:40
108
转载 Spring Cloud(Finchley版)-04-服务注册与服务发现-原理剖析
http://www.globalshopping.top。第2节说过:地址硬编码问题——电影微服务中将用户微服务的地址写死,如果用户微服务地址发生变化,难道要重新上线电影微服务吗?本节来解决该问题。不妨先思考一下,怎样才能让服务消费者总能找到服务提供者呢?或者说,怎样才能让服务消费者感知到服务提供者地址的变化呢?TIPS目前市面上把服务消费者找到服务提供者的这种...
2019-11-15 18:25:27
80
转载 Spring Cloud(Finchley版)-03-监控:强大的Spring Boot Actuator
http://www.globalshopping.top。第2节说过:应用没有监控,没有画板,一切指标都没有。在这个Growth Hack逐渐成为主流的时代,不弄个Dashboard把系统压力、QPS、CPU、内存、日活啥的可视化,你好意思出来混吗……本节我们来解决该问题。Spring Boot Actuator是Spring Boot官方提供的监控组件。只需为项目添加以下依...
2019-11-15 18:23:35
101
转载 Spring Cloud(Finchley版)-02-构建分布式应用
http://www.globalshopping.top上一节说过,Spring Cloud是一个快速构建分布式应用的工具集。本节,我们就来编写一个简单的分布式应用,并探讨这个分布式应用有哪些问题。服务消费者 & 提供者本书使用服务提供者与服务消费者来描述微服务之间的调用关系。下表解释了服务提供者与服务消费者。表-服务提供者与服务消费者名词 定义 服务...
2019-11-14 18:09:39
89
转载 Spring Cloud(Finchley版)-01-开篇
http://www.globalshopping.top前言·课程简介最近挺多童鞋在公众号(itmuch_com)上催更Spring Cloud系列教程,故有此系列。以下是几点说明/规划/答疑:问:为什么基于Finchley,而非Greenwich?答:就目前而言,Finchley更贴近生产,而Greenwich尚未发布——虽然已经RC了,但有挺多不确定因素,例如:Resi...
2019-11-14 18:05:41
89
原创 SpringBoot项目maven依赖另一个SpringBoot项目出错
spring-boot工程打包编译时,会生成两种jar包,一种是普通的jar,另一种是可执行jar。默认情况下,这两种jar的名称相同,在不做配置的情况下,普通的jar先生成,可执行jar后生成,所以可执行jar会覆盖普通的jar。<plugin> <groupId>org.springframework.boot</gro...
2019-09-27 17:08:07
2485
原创 MAVEN多模块工程install 报错org.apache.maven.project.ProjectBuildingException: Some problems were encountere
springcloud为其他项目的父pommaven install utils项目 报错:org.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs:解决方案:指定父pom路劲就OK了。http://www....
2018-05-10 10:13:50
11340
1
原创 eureka 整合ribbon遇到的坑
eureka整合ribbon只需要在eureka客户端@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}RestTemplate上面加入注解@LoadBalanced。现在我有两个微服务user和admin,使用user微服...
2018-05-04 17:18:11
1559
原创 SpringCloud Eureka 安全认证
第一步:在eureka server中引入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency&g...
2018-04-18 15:53:42
156
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人