202109-18 Java源码解析之Gateway请求转发 Gateway请求转发本期我们主要还是讲解一下Gateway,上一期我们讲解了一下Gateway中进行路由转发的关键角色,过滤器和断言是如何被加载的,上期链接://www.jb51.net/article/211824.htm好了我们废话不多说,开始今天的Gateway请求转发流程讲解,为了在讲解源码的时候,以防止大家可能会迷糊,博主专门画了一下源码流程图,链接地址://www.jb51.net/article/211824.htm上一期我们已经知道了相关类的加载,今天直接从源码开始,大家... 继续阅读 >
202106-23 SpringCloud Gateway加载断言predicates与过滤器filters的源码分析 我们今天的主角是Gateway网关,一听名字就知道它基本的任务就是去分发路由。根据不同的指定名称去请求各个服务,下面是Gateway官方的解释:https://spring.io/projects/spring-cloud-gateway,其他的博主就不多说了,大家多去官网看看,只有官方的才是最正确的,回归主题,我们的过滤器与断言如何加载进来的,并且是如何进行对请求进行过滤的。大家如果对SpringBoot自动加载的熟悉的话,一定知道要看一个代码的源码,要找... 继续阅读 >
202105-20 深入学习spring cloud gateway 限流熔断 目前,SpringCloudGateway是仅次于SpringCloudNetflix的第二个最受欢迎的SpringCloud项目(就GitHub上的星级而言)。它是作为SpringCloud系列中Zuul代理的继任者而创建的。该项目提供了用于微服务体系结构的API网关,并基于反应式Netty和ProjectReactor构建。它旨在提供一种简单而有效的方法来路由到API并解决诸如安全性,监视/度量和弹性之类的普遍关注的问题。基于Redis限流SpringCloudGateway为您提供了许多功能和配置... 继续阅读 >
202104-27 详解SpringCloud Gateway 2020.0.2最新版 简述官网:https://spring.io/projects/spring-cloud-gatewayGitHub地址:https://github.com/spring-cloud/spring-cloud-gateway本文编写自2021年4月7日,当前SpringCloud最新版本为2020.0.2版本本文使用版本为SpringCloud版本2020.0.2spring-cloud-starter-gateway版本3.0.2spring-boot-starter版本2.4.4该项目提供了一个用于在SpringWebFlux之上构建API网关的库。SpringCloudGateway旨在提供一种简单而有效的方法来路由... 继续阅读 >
202103-14 如何为Spring Cloud Gateway加上全局过滤器 既然是一个网关。那么全局过滤器肯定是少不了的一个存在。像是鉴权、认证啥的不可能每个服务都做一次,一般都是在网关处就搞定了。Zuul他就有很强大的过滤器体系来给人使用。Gateway当然也不会差这么点东西。对于SpringCloud体系来说,一切的实现都是那么的简单。那么废话不多说,直接开始写起来。 Gateway内部有一个接口名为GlobalFilter,这个就是Gateway的全局过滤器接口,只要在应用中实现此接口后注册为Spring的Bean,... 继续阅读 >
202102-21 SpringCloud Gateway 利用 Mysql 实现动态路由的方法 需求描述标准网关动态路由功能是重要的一环,将路由、断言以及过滤器信息,持久化到Mysql中,通过配置后台页面实现路由、断言、以及过滤器等配置的增删改查。SpringCloudGateway路由及黑白名单实现背景SpringCloud路由APISpringCloudGateway通过定义RouteDefinitionRepository来实现动态路由.//保存路由缓存publicinterfaceRouteDefinitionWriter{Mono<Void>save(Mono<RouteDefinition>route);Mono<Void>de... 继续阅读 >
202101-27 Spring Cloud Gateway 使用JWT工具类做用户登录校验功能 1.JWT测试/***@Auther:csp1999*@Date:2021/01/24/19:29*@Description:JWT测试*/publicclassJwtTest{/***创建Jwt令牌:**JWT=头部Header+载荷playload+签名signature*/@TestpublicvoidtestCreateJwt(){//构建jwt令牌//1.头部Header:描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等JwtBuilderbuilder=Jwts.builder().setId("8989")//设置令牌唯一编号.... 继续阅读 >
202101-08 Spring Cloud Gateway 获取请求体(Request Body)的多种方法 一、直接在全局拦截器中获取,伪代码如下privateStringresolveBodyFromRequest(ServerHttpRequestserverHttpRequest){Flux<DataBuffer>body=serverHttpRequest.getBody();AtomicReference<String>bodyRef=newAtomicReference<>();body.subscribe(buffer->{CharBuffercharBuffer=StandardCharsets.UTF_8.decode(buffer.asByteBuffer());DataBufferUtils.release(buffer);bodyRef.set(charBuffe... 继续阅读 >
202012-30 spring cloud gateway使用 uri: lb://方式配置时,服务名的特殊要求 在gateway中配置uri配置有三种方式,包括第一种:ws(websocket)方式:uri:ws://localhost:9000第二种:http方式:uri:http://localhost:8130/第三种:lb(注册中心中服务名字)方式:uri:lb://brilliance-consumer其中ws和http方式不容易出错,因为http格式比较固定,但是lb方式比较灵活自由。不考虑网关,只考虑服务时,服务名命名时比较自由,都能启动被访问,被注册到注册中心,但是如果提供给gateway使用时,就会对服务命名方... 继续阅读 >
202012-07 Springcloud GateWay网关配置过程图解 一般为了不暴露自己的端口信息等,会选择架构一个网关在前面进行阻挡,起到保护的作用。附上一张工作示列图。1.配置网关9527gateway作为网关需要和其他的应用一样需要注册进eureka中进行管理,先创建应用gateway9527pom文件,关键是gateway依赖<dependencies><dependency><groupId>com.bai</groupId><artifactId>cloud-api-common</artifactId><version>${project.version}</version></dependency>... 继续阅读 >
202012-02 解决spring cloud gateway 获取body内容并修改的问题 之前写过一篇文章,如何获取body的内容。SpringCloudGateway获取body内容,不影响GET请求确实能够获取所有body的内容了,不过今天终端同学调试接口的时候和我说,遇到了400的问题,报错是这样的HTTPmethodnamesmustbetokens,搜了一下,都是说https引起的。可我的项目还没用https,排除了。想到是不是因为修改了body内容导致的问题,试着不修改body的内容,直接传给微服务,果然没有报错了。问题找到,那就好办了,肯定是我... 继续阅读 >
202012-02 Spring Cloud Gateway(读取、修改 Request Body)的操作 SpringCloudGateway(以下简称SCG)做为网关服务,是其他各服务对外中转站,通过SCG进行请求转发。在请求到达真正的微服务之前,我们可以在这里做一些预处理,比如:来源合法性检测,权限校验,反爬虫之类…因为业务需要,我们的服务的请求参数都是经过加密的。之前是在各个微服务的拦截器里对来解密验证的,现在既然有了网关,自然而然想把这一步骤放到网关层来统一解决。如果是使用普通的Web编程中(比如用Zuul),这本... 继续阅读 >
202012-02 Spring Cloud Gateway 记录请求应答数据日志操作 我就废话不多说了,大家还是直接看代码吧~publicclassGatewayContext{publicstaticfinalStringCACHE_GATEWAY_CONTEXT="cacheGatewayContext";/***cachejsonbody*/privateStringcacheBody;/***cacheformdata*/privateMultiValueMap<String,String>formData;/***cachereqeustpath*/privateStringpath;publicStringgetCacheBody(){returncacheBody;}publicvoidsetCacheBody(St... 继续阅读 >
202011-16 Nginx 502 Bad Gateway错误原因及解决方案 Nginx502BadGateway的错误已经遇到好几次了,这里做一下记录,备忘哈哈。会有好多种情况出现502错误,下面我们分情况来说一下。一、fastcgi缓冲区设置过小出现错误,首先要查找nginx的日志文件,目录为/var/log/nginx,在日志中发现了如下错误。2013/01/1713:33:47[error]15421#0:*16upstreamsenttoobigheaderwhilereadingresponseheaderfromupstream查阅了一下资料,大意是nginx缓冲区有一个bug造成的,我们网... 继续阅读 >
202011-13 PHP 502bad gateway原因及解决方案 nginx+php出现502badgateway,一般这都不是nginx的问题,而是由于fastcgi或者php的问题导致的,常见的有以下几种。1.php.ini的memory_limit过小(如果有个别php程序进程需要占用极大内存时这个必须注意)2.php-fpm.conf中max_children或者max_requests设置不合理(设置过小会因为没有足够的cgi进程处理请求,设置过大会出现一会儿有响应正常,一会儿等很久才有响应的情况,一般情况下children按照内存计算,比如说1G设... 继续阅读 >
202010-28 Spring Cloud Gateway + Nacos 实现动态路由 本节开始介绍SpringCloudGateway中动态路由的实现方法,包括:Nacos集成动态路由配置,更新配置文件即自动更新路由MySQL+二级缓存实现,主要基于Gateway的一些特性进行重写,实现路由信息的自动更新这篇文章主要介绍第一种方式:将配置文件放到Nacos进行托管,网关服务通过引入Nacos而自动更新路由配置信息。实现较为简单。本节代码在:https://github.com/laolunsi/spring-boot-examples,参考例23即可。下面进入正... 继续阅读 >