spring cloud
天涯泪小武
开源贡献者,有代码洁癖。京东coder。
展开
-
spring cloud网关zuul源码之Filter管理
接上一篇request管理。原文地址:http://blog.csdn.net/haha7289/article/details/54344150zuul支持动加载Filter类文件。实现原理是监控存放Filter文件的目录,定期扫描这些目录,如果发现有新Filter源码文件或者Filter源码文件有改动,则对文件进行编译加载。目前zuul支持使用Groovy编写的Filter。转载 2017-04-11 11:12:12 · 1597 阅读 · 0 评论 -
springcloud gateway之addRequestParameter详细使用及踩坑注意
SpringCloud的网关gateway提供了多个内置Filter,其中addRequestHeader是添加header的,这个无坑,比较简单。还有一个添加参数的,addRequestParameter,这个就有点问题了。具体往下看。版本如下,请注意Springboot版本,这是本篇Post请求异常的关键。1 对应的uri只能是get请求看一个简单的示例,addReques...原创 2018-10-23 11:47:09 · 12133 阅读 · 0 评论 -
详解SpringCloud-gateway动态路由两种方式,以及路由加载过程
gateway配置路由主要有两种方式,一种是用yml配置文件,一种是写代码里,这两种方式都是不支持动态配置的。如:下面就来看看gateway是如何加载这些配置信息的。1 路由初始化无论是yml还是代码,这些配置最终都是被封装到RouteDefinition对象中。一个RouteDefinition有个唯一的ID,如果不指定,就默认是UUID,多个RouteDefinitio...原创 2018-10-26 16:21:29 · 152632 阅读 · 30 评论 -
springcloud gateway代理get正常、post请求报错的问题
在上一篇时,我们在使用gateway的反向代理功能时,发现了一个很严重的问题,那就是通过gateway去访问后端服务时,如果发起的是Get请求,就一切正常,如果是Post请求,就会报错。无论是使用什么filter。java.lang.IllegalStateException: Only one connection receive subscriber allowed. at react...原创 2018-10-24 12:08:23 · 10864 阅读 · 3 评论 -
spring-webflux中Flux<DataBuffer> 转String
Spring WebFlux既支持像Tomcat,Jetty这样的的传统容器(前提是支持Servlet 3.1 Non-Blocking IO API),又支持像Netty,Undertow那样的异步容器。不管是何种容器,Spring WebFlux都会将其输入输出流适配成Flux<DataBuffer>格式,以便进行统一处理。在使用SpringCloud-gateway时,在各个f...原创 2018-10-24 18:09:36 · 26899 阅读 · 20 评论 -
获取SpringCloud gateway 响应的response的值,可以查看、修改
gateway获取、修改客户端请求Request的参数,我们在上一篇已经讲过了。那么网关发起请求后,微服务返回回来的response的值,还是要经过网关才发给客户端的。很多时候,我们希望能看到响应的值,或者修改它。那么怎么做呢?import org.reactivestreams.Publisher;import org.springframework.cloud.gateway.filt...原创 2018-11-01 11:51:34 · 50802 阅读 · 51 评论 -
SpringCloud gateway跨域配置
gateway允许跨域的配置和zuul的不一样,记录一下。版本 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <...原创 2018-11-01 20:05:14 · 17489 阅读 · 14 评论 -
SpringCloud gateway全局异常处理,以及后台的服务异常response的异常包装
gateway自己服务的全局异常处理,参考这篇https://segmentfault.com/a/1190000016854364?utm_source=tag-newest有两个类/** * @author wuweifeng wrote on 2018/11/2. */@Configurationpublic class ExceptionConfig { /**...原创 2018-11-02 16:52:58 · 22678 阅读 · 6 评论 -
在docker部署Apollo配置中心,在rancher中部署并使用
Apollo配置中心是携程开源的知名配置中心项目,类似的有disconf等,它的GitHub地址是:https://github.com/ctripcorp/apollo由于我们主要使用docker(rancher)来运维管理项目,所以Apollo也要部署到docker里,来做为SpringCloud的配置中心。Apollo官方提供了docker镜像,部署起来比较方便。https://hu...原创 2018-12-20 10:55:00 · 2844 阅读 · 1 评论 -
Springboot集成sentinel实现接口限流入门
Sentinel是阿里巴巴开源的限流器熔断器,并且带有可视化操作界面。在日常开发中,限流功能时常被使用,用于对某些接口进行限流熔断,譬如限制单位时间内接口访问次数;或者按照某种规则进行限流,如限制ip的单位时间访问次数等。之前我们已经讲过接口限流的工具类ratelimter可以实现令牌桶的限流,很明显sentinel的功能更为全面和完善。来看一下sentinel的简介:https://...原创 2019-05-07 11:40:44 · 34453 阅读 · 15 评论 -
Springboot使用Sentinel限流,集成zookeeper完成规则的持久化
上一篇简单介绍了sentinel限流的基本配置和使用,这一篇我们来稍微深入一点,看看如何将zookeeper继承进来,用以保存添加的流控规则。上一篇中我们启动了dashboard.jar,然后在客户端中指定了dashboard的地址。之后启动项目,随便访问个接口,之后就能在dashboard的界面上看到相应的请求了,并且能在控制台上添加一些规则,保存后客户端就能生效了。基于内存的推...原创 2019-07-02 16:25:58 · 6793 阅读 · 7 评论 -
zuul集成Sentinel,完成对path映射的限流
前面我们讲过了对单体应用的Sentinel限流,以及使用zookeeper对规则的持久化。通过前面的工作,我们可以完成单个实例的细粒度的限流、熔断操作。譬如有一个服务User,在分布式环境下,开启了多个实例,那么每个实例都可以获得如每秒限制10个登录的限流功能。但是有些场景下,我们想要另外一种限流方式,譬如在网关zuul层,想限制对User服务的限流,而不去关心具体它有多少个实例。这时,就需要...原创 2019-07-03 17:18:58 · 3952 阅读 · 9 评论 -
zuul集成Sentinel,使用zookeeper完成动态规则限流
上一篇做了简单的zuul集成Sentinel,是在zuul代码中直接写的rule规则,无法完成动态变化的功能。那么和普通的实例限流一样,zuul的限流也支持动态的。话不多说,直接上代码,在pom中,把我注释掉的部分给放开。还是在原来的config类里加上这一个方法private void initZookeeperApis() { final String r...原创 2019-07-03 17:55:57 · 2501 阅读 · 2 评论 -
基于各服务注解方式,在网关zuul中对所有下游服务权限做控制,覆盖到所有接口,权限控制到角色、菜单、按钮、方法
开源地址:https://gitee.com/tianyalei/zuulauth在单体应用架构下,常见的用户-角色-菜单权限控制模式,譬如shiro,就是在每个接口方法上加RequireRole,RequirePermission,当调用到该方法时,可以从配置的数据库、缓存中来进行匹配,通过这种方式来进行的权限控制。而在微服务架构下,我们会使用网关来作为所有服务的入口,由网关来完成鉴权、...原创 2019-08-15 12:29:24 · 5064 阅读 · 0 评论 -
SpringCloud从入门到进阶——单点部署Zuul的压力测试与调优(一)
前言说明:通过zuul访问后端服务时,这个流程是如何的?当你用500线程并发访问zuul和用100线程并发访问zuul,zuul分别会用多少个线程去并发访问后端的服务?后端最多能承受多少个并发线程?zuul默认是Hystrix的信号量隔离,这个值对zuul并发访问后端时有什么影响?可以通过这一篇来了解一下。内容 作为微服务架构系统的入口,毫无疑问,Zuul的并发性能直接决定了整个系统...转载 2019-09-12 15:56:31 · 1280 阅读 · 0 评论 -
SpringCloud-gateway全局GlobalFilter获取post的请求参数
gateway里面可以自定义普通filter,也可以创建自定义的GlobalFilter。GlobalFilter实际上还是比较常用的,譬如可以在GlobalFilter里做日志处理、认证鉴权等,这里就涉及一个获取到请求参数的问题。用户发起Get、Post请求,经过网关gateway,gateway的GlobalFilter进行拦截——获取参数——处理并包装——转到下一级,我们就来看看该怎...原创 2018-10-25 11:04:29 · 62899 阅读 · 66 评论 -
zuul灰度发布功能实现
灰度发布、蓝绿发布、金丝雀发布各是什么意思,可以看这篇http://www.appadhoc.com/blog/product-release-strategy/。基于eureka、ribbon实现灰度发布,是这一篇要讲的知识。我们要发布版本了,在不确定正确性的情况下,我们选择先部分节点升级,然后让一些特定的流量进入到这些新节点,完成测试后再全量发布。我们知道,在eureka中注册各个服务后,如果原创 2018-01-22 16:59:50 · 14917 阅读 · 9 评论 -
SpringCloud重试机制配置
SpringCloud重试retry是一个很赞的功能,能够有效的处理单点故障的问题。主要功能是当请求一个服务的某个实例时,譬如你的User服务启动了2个,它们都在eureka里注册了,那么正常情况下当请求User服务时,ribbon默认会轮询这两个实例。此时如果其中一个实例故障了,发生了宕机或者超时等,如果没有配置启用重试retry策略,那么调用方就会得到错误信息或者超时无响应或者是熔断返回的信息原创 2018-01-22 14:34:44 · 16448 阅读 · 0 评论 -
spring cloud网关zuul源码Request生命周期管理
zuul是spring cloud集成的网关(api gateway),主要是做统一的权限控制,路由分发,反向代理和负载均衡。原文链接:http://blog.csdn.net/haha7289/article/details/54312043zuul核心框架zuul是可以认为是一种API-Gateway。zuul的核心是一系列的filters, 其作用可以类比Se转载 2017-04-11 11:10:08 · 5528 阅读 · 0 评论 -
spring cloud网关zuul之filter注册
原文地址 https://my.oschina.net/u/3300636/blog/851984?nocache=1491877235421zuul开启首先由@EnableZuulProxy 注解是开启zuul的注解。@EnableCircuitBreaker@EnableDiscoveryClient@Target({ElementType.TYPE})@Retention(转载 2017-04-11 11:15:35 · 6612 阅读 · 1 评论 -
zuul微服务网关的常用示例
微服务架构体系中,通常一个业务系统会有很多的微服务,比如:OrderService、ProductService、UserService...,为了让调用更简单,一般会在这些服务前端再封装一层,类似下面这样:前面这一层俗称为“网关层”,其存在意义在于,将"1对N"问题 转换成了"1对1”问题,同时在请求到达真正的微服务之前,可以做一些预处理,比如:来源合法性检测,权限校验,反爬虫之类...传统方式转载 2017-09-25 11:20:17 · 11106 阅读 · 0 评论 -
zuul设置熔断、断路器
在前面一篇文章中http://blog.csdn.net/tianyaleixiaowu/article/details/77884778,已经讲过了独立使用zuul进行反向代理了。在那篇文章中,没有使用eureka进行服务发现,而是使用简单的url配置,直接将用户请求发送到指定的url。这种做法适合于兼容一些老系统或者无法进行eureka服务注册的项目中,当时有一个东西没有提到,那就是熔断器。...原创 2017-09-22 16:15:44 · 16709 阅读 · 2 评论 -
eureka集群高可用配置
网上讲这个东西的很多,抄来抄去的,大部分类似,多数没讲明白为什么那么配置。譬如eureka.client.register-with-eureka和fetch-registry是否要配置,配不配区别在哪里;eureka的客户端添加service-url时,是不是需要把所有的eureka的server地址都写上,还是只需要写一个server就可以了(因为server之间已经相互注册了)?如果写上了所...原创 2017-10-09 17:27:47 · 66743 阅读 · 58 评论 -
eureka监听各服务状态,下线、重连等,并做相应的处理
在一些场景下,我们需要监听eureka服务中心的一些状态,譬如某个微服务挂掉了,我们希望能监听到,并给管理员发送邮件通知。Eureka的server端会发出5个事件通知,分别是:EurekaInstanceCanceledEvent 服务下线事件EurekaInstanceRegisteredEvent 服务注册事件EurekaInstanceRenewedEvent 服务续约事件EurekaRe原创 2017-10-10 15:11:27 · 32878 阅读 · 17 评论 -
eureka客户端源码解析
原文:https://blog.tookbra.com/2017/08/25/Spring-Cloud-Eureka-Client-Source/源码目录结构.├── pom.xml└── src ├── main │ ├── java │ │ └── org │ │ └── springframework │ │转载 2017-10-10 16:08:59 · 3433 阅读 · 0 评论 -
zuul动态配置路由规则,从DB读取
前面已经讲过zuul在application.yml里配置路由规则,将用户请求分发至不同微服务的例子。zuul作为一个网关,是用户请求的入口,担当鉴权、转发的重任,理应保持高可用性和具备动态配置的能力。我画了一个实际中可能使用的配置框架,如图。当用户发起请求后,首先通过并发能力强、能承担更多用户请求的负载均衡器进行第一步的负载均衡,将大量的请求分发至多个网关服务。这是分布式的第一步。如果是使用do原创 2017-09-11 15:34:58 · 21787 阅读 · 20 评论 -
Zuul超时问题,微服务响应超时,zuul进行熔断
是这样的,今天碰到了微服务响应超时问题,而且超时时间特别短,2秒就超时,zuul就走熔断了。 我采用zuul作为网关,根据不同的访问路径进行微服务的路由,譬如有个服务是user,我访问user服务的某个接口时,该接口执行时间很慢,2秒多,然后还没执行完,zuul就执行熔断了,进入了我配好的ZuulFallbackProvider里。所以来研究一下zuul的超时处理。 前提,zuul和微服务都已经原创 2017-12-11 14:23:48 · 66853 阅读 · 20 评论 -
eureka配置账号密码才能访问
如果配置好了eureka server,默认情况下我们就直接直接访问到eureka的界面了。如果不想让所有人都能访问到eureka的界面,可以加上权限认证,输入账号密码才能访问。方式如下:在eureka的server端配置,pom.xml里加上 org.springframework.boot spring-boot-starter-security 然后在yml里加上原创 2017-12-12 14:14:58 · 18598 阅读 · 2 评论 -
zuul报错java.net.UnknownHostException: 4d59d509898a: Name or service not known
是这样的,eureka、zuul和普通的微服务在本地是OK的,部署到docker后,通过zuul访问某个微服务就报错了。用的是serviceId的方式,在eureka界面也能看到各个微服务都是在线的,没有问题,但就是通过zuul的路由访问时会报错。com.netflix.zuul.exception.ZuulException: Forwarding error2017/11/24 下午9:49:原创 2017-11-25 09:50:39 · 9092 阅读 · 8 评论 -
微服务中网关(API Gateway)的技术选型
用 Spring Cloud 微服务实战中,大家都知道用 Zuul 作为智能网关。API 网关(API Gateway)主要负责服务请求路由、组合及协议转换。下面是大家的总结:一、最佳回答网关的技术选型SpringCloud-Zuul :社区活跃,基于 SrpingCloud 完整生态, 是构建微服务体系前置网关服务的最佳选型.Kong : 基于OpenResty的 API 网关服务和网关服务管理转载 2017-12-07 11:45:17 · 36856 阅读 · 3 评论 -
zookeeper docker集群配置
本篇讲一下zookeeper在docker中集群搭建方式。先来看看zookeeper的单个Docker配置吧。共包含两个文件,一个Dockerfile,一个sh脚本Dockerfile如下:FROM openjdk:8-jre-alpine# Install required packagesRUN apk add --no-cache \ bash \ su-execE原创 2017-12-19 16:34:43 · 5077 阅读 · 2 评论 -
SpringCloud Feign重试详解
摘要: 今天在生产环境发生了数据库进程卡死的现象,除了sql因为全量更新,没加索引的原因,最主要还是我们的接口的服务器端接口出现问题了。忽视了更新接口的幂等性,以及调用方feign client的重试,导致接口重复执行。万幸的是数据已经修复,花了几个小时跟踪feign和ribbon的源码,把其原理彻底搞明白了。 feign是netflix提供的服务间基于http的rpc调用框架,在spr转载 2018-01-22 14:41:23 · 9939 阅读 · 2 评论 -
SpringCloud从入门到进阶 ——单点部署Zuul的压力测试与调优(二)
内容 作为微服务架构系统的入口,毫无疑问,Zuul的并发性能直接决定了整个系统的并发性能。本文结合前几篇文章的内容,在云服务器中部署了包含Eureka Server,Zuul等组件的1.0版本的微服务架构,并进行单点部署Zuul的压力测试,对其并发性能一探究竟。环境说明 转载请说明出处:SpringCloud从入门到进阶(九)——单点部署Zuul的压力测试与调优(二)问...转载 2019-09-12 16:01:40 · 1230 阅读 · 0 评论