小白网-奉贤部落-奉贤免费信息发布平台

查看: 60|回复: 0

gateway网关的感化(gateway搭建网关)

[复制链接]

2万

主题

0

回帖

8万

积分

论坛元老

Rank: 8Rank: 8

积分
88256
发表于 2025-7-26 13:01 | 显示全部楼层 |阅读模式
这篇文章已经收录在我的Github全集里了他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。接待明星:https://github.com/yehongzhi/learningSummary!
领会办事网关的最好方式是从您为什么需要它起头他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
按照支流微办事架构的特点,假定有A、B、c三个办事,假如这三个办事需要做一些请求过滤和权限检查,若何实现?
  • 每个办事都是自己实现的他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
  • 编写一个公共办事,然后让A、B、C办事引入公共办事的Maven依靠他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
  • 利用办事网关,一切客户端请求办事网关过滤请求并考证权限,然后将它们路由到A、B和C办事他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。第一种方式明显是逆天的,这里就不会商了他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。第二种方式稍微聪明一些,可是假如公共办事的逻辑发生变化,那末一切依靠公共办事的办事都需要重新打包和摆设才能生效他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    所以很明显,利用办事网关可以处理上述题目他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。其他办事不需要增加任何依靠,只需要在网关中设置一些参数,然后便可以路由转发给响应的后端办事他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。假如需要请求过滤和权限检查,它们都可以在网关层实现他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。假如需要更新权限检查的逻辑,只需要在网关层点窜即可,其他后端办事不需要点窜他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    接下来,我们来先容一下办事网关的功用,包括:
  • 按指定线路发送
  • API监控
  • 权限控制
  • 限流所以办事网关很重要!那末,我们来进修一下今朝支流的网关他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    起头利用GateWay的第一步是建立一个项目作为网关他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。这里利用的SpringBoot版本是2.0.1,它引入了依靠性:
    org . spring framework . cloudspring-cloud-starter-gatewayorg . spring framework . cloudspring-cloud-dependenciesfinch ley他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。SR1POMimport
    我们需要利用网关来转发请求,所以我们首先需要一个后端办事他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。在这里,我简单地建立了一个用户项目他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。然后启动用户项目,编写一个接口来获得一切用户信息:
    然后我们现在设置网关的application.yml来实现请求转发他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    办事器:端口:9201  spring: 利用:称号:API-网关云:网关:路由:-Uri:http://localhost:8080/user/getList #终极目标地的请求地址谓词:# Assert-Path =/user/getList # Route假如途径婚配
    也就是说,我请求http://localhost:9201/user/getList以后,端口9201就是一个网关办事,它会婚配/user/getList的路由,最初转发到方针地址http://localhost:8080/user/getList他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    这是一个简单的网关网关的利用他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    继续上面的先容性例子,我们留意到有一个谓词设置,这有点使人困惑他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。中文翻译叫断言,有点类似于Java8流中的谓词函数他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。假如断言为真,则路由婚配他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    除此之外,gateway的另一个焦点是Filter(过滤器),有全局和部分两品种型他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。那末全部网关流程是什么样的呢?请看下图:
    从图中可以看出,gateway的两个焦点是谓词和过滤器他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。接下来,我们将重点先容这两种的用法他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    路由谓词的利用Spring Cloud Gateway包括了很多内置的路由谓词工场,你可以经过设置间接利用各类内置的猜测器他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    路由后谓词请求在指按时候后婚配路由他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    spring:cloud:gateway:routes:-id:user _ getListuri:http://localhost:8080/user/getList谓词:-After = 2021-10-30t 01:00:00+08:00[亚洲/上海]
    在指按时候之前,路由谓词的请求将婚配此路由他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    spring:cloud:gateway:routes:-id:user _ getListuri:http://localhost:8080/user/getList谓词:-Before = 2021-10-30t 02:00:00+08:00[亚洲/上海]
    指按时候间隔内的路由谓词请求将婚配此路由他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    spring:cloud:gateway:routes:-id:user _ getListuri:http://localhost:8080/user/getList谓词:-Between = 2021-10-30t 01:00:00+08:00[亚洲/上海],2021-10-30T02:00:00+08:00
    具有指定cookie的Routepredict请求将婚配此路由他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    spring:cloud:gateway:routes:-id:user _ getListuri:http://localhost:8080/user/getList谓词:- cookie=username,yehongzhi
    利用POSTMAN发送一个在cookie中带有username=yehongzhi的请求他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    具有指定请求标头的标头猜测请求将与此路由婚配他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    spring:cloud:gateway:routes:-Id:user _ getListuri:http://localhost:8080/user/getList谓词:- Header=X-Id,d+
    利用POSTMAN发送请求头中带有X-Id的请求他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    具有指定主机的Routepredict请求将婚配此路由他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    spring:cloud:gateway:routes:-id:user _ getListuri:http://localhost:8080/user/getList谓词:-Host = * * . yehongzhi . com
    利用POSTMAN发送一个请求,请求头中包括Host=www.yehongzhi.com他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    途径路由谓词发送对与路由婚配的指定途径的请求他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    spring:cloud:gateway:routes:-id:user _ getListuri:http://localhost:8080/user/getList谓词:- Path=/user/getList
    间接在阅读器中输上天址http://localhost:9201/user/getlist停止拜候他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    方式路由谓词发送对指定方式的请求以婚配路由他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    spring:cloud:gateway:routes:-id:user _ getListuri:http://localhost:8080/user/getList谓词:- Method=POST
    经过邮递员邮寄请求他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    query利用指定的查询参数猜测请求可以婚配此路由他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    spring:cloud:gateway:routes:-id:user _ Query _ byNameuri:http://localhost:8080/user/Query/byName谓词:- Query=name
    键入http://localhost:9201/user/query/by name?Name=tom地址,发送请求他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    权重路由谓词利用权重来路由响应的请求他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。以下设置表白80%的请求将被路由到localhost:8080,20%的请求将被路由到localhost:8081他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    spring:云:网关:路由:-id:user _ 1uri:http://localhost:8080谓词:- Weight=group1,8-id:user _ 2uri:http://localhost:8081谓词:- Weight=group1,2
    来自指定远程地址的RemoteAddr路由谓词请求可以婚配此路由他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    spring:cloud:gateway:routes:-id:user _ 1uri:http://localhost:8080/user/getList谓词:-remote addr = 192 . 168 . 1 . 4
    利用阅读器请求他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    利用组合spring:cloud:gateway:routes:-id:user _ 1uri:http://localhost:8080/user/getlist猜测他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。-remote addr = 192 . 168 . 1 . 4-Method = POST-cookie = username,yehongzhi-Path =/user/getList
    利用POSTMAN倡议请求,利用POST方式,uri为/user/getList,带cookie,RemoteAddr他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    自界说谓词假如需要自界说谓词,怎样玩?实在很简单他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。看源代码,照着做,需要继续AbstractRoutePredicateFactory类他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    例如,假如要求令牌值为abc,则将婚配路由他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。怎样写?请看代码:
    @ Componentpublic class TokenRoutePredicateFactory扩大AbstractRoutePredicateFactory {public static final String TOKEN _ KEY = " TOKEN value ";publitokenroutepricefactory(){/当前类的Config类经过反射建立Config并赋值,在apply中发回给super(tokenroutepricefactory . Config . class);}@ overridepublic list快速方式字段order () {/"token value "与Configreturn arrays . aslist(token _ key)的接收字段分歧;}@ overridepublic predict apply(config Config){/这里获得的Config工具是下面的自界说Config工具return new predict(){@ overridepublic boolean test(server webexchange exchange){MultiValueMap params = exchange . get request()他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。getQueryParams();//获得请求参数string value = params . Get first(" token ");//将请求参数与设置文件界说的令牌停止比力,假如相称,则返回truereturn config . gettokenvalue()!= null  amp ampconfig.getTokenValue()他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。即是(值);}};}/用于接收设置文件公共静态类config {私有字符串标志值界说的值;public String getTokenValue(){return token value;}public void setTokenValue(String token value){this . token value = token value;}}}
    这里需要留意的一点是,类名必须在RoutePredicateFactory的末端,前一个用作设置名他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。例如,TokenRoutePredicateFactory的设置名是Token,这是一个约定的设置他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    然后将此设置增加到设置文件中:
    spring:Cloud:Gateway:Routes:-ID:user _ 1URI:http://localhost:8080/user/getlist猜测:
    然后用POSTMAN发送请求,带有令牌参数,其值为abc他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    假如token的值不正确,它将报告404他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    为什么要整合注册中心?由于每个办事前面凡是有多台机械,而且一般用办事名来设置,而不用办事的IP地址,需要负载平衡挪用他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    我将利用Nacos作为这里的注册中心他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    先容Maven依靠关系:
    org . spring framework . cloudspring-cloud-starter-Alibaba-nacos-discoveryorg . spring framework . cloudspring-cloud-dependenciesFinchley他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。SR1POMimportorg . spring framework . cloudspring-cloud-Alibaba-dependencies0 . 2 . 2 . releasePOMimport
    用正文启动该类以翻开注册表他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    @ spring boot application@ EnableDiscoveryClientpublic class gateway application {public static void main(String[]args){spring application . run(gateway application . class,args);}}
    将设置增加到application.yml:
    spring:application:name:API-Gatewaycloud:nacos:discovery:server-addr:127 . 0 . 0 . 1:8848Service:$ { spring . application . name }Gateway:-ID:consumerURI:lb://consumer #利用LB协议,consumer是办事名
    建立一个消耗者并向nacos注册,并供给一个接口:
    @ rest controllerpublic class consumer controller {@ Value(" $ { server . port } "private String port;@ request mapping(" consumer/get detail/{ ID } ")public string get detail(@ path variable(" ID ")string ID){return "端口号:"+port+",收集id:"+id+" }}
    启动消耗者和网关项目,然后翻开nacos控制台检察这两个办事他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    持续请求地址为http://localhost:9201/consumer/get detail/1,可以看出实现了负载平衡挪用办事他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    能够有人会感觉每个办事都需要一条线路,很麻烦他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。有一个简单的设置可以处理这个题目:
    spring:gateway:discovery:locator:enabled:true
    然后启动该办事并重试他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。需要将办事名增加到请求地址中,仍然没有题目!
    文章最初重点先容了网关的路由转发功用,并集成了注册中心他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。权限控制可以经过过滤器来实现他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。由于篇幅有点长,过滤器放鄙人一篇文章里他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。感激您的阅读他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    假如你感觉有用,请喜好他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。你们的赞是我创作的最大动力~
    我是一个尽力让大师记着的法式员他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。下次见!!!
    才能有限,若有毛病或不妥之处,请批评斧正,配合进修交换!
  • 回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|小白网-奉贤部落-奉贤免费信息发布平台  

    GMT+8, 2025-11-11 19:52 , Processed in 0.256713 second(s), 21 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表