<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          springcloudAlibaba API網(wǎng)關(guān)SpringcloudGateway學(xué)習(xí)筆記

          共 3888字,需瀏覽 8分鐘

           ·

          2020-12-04 15:49

          點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”

          優(yōu)質(zhì)文章,第一時(shí)間送達(dá)

          66套java從入門(mén)到精通實(shí)戰(zhàn)課程分享

          一、概述

          • 服務(wù)發(fā)現(xiàn),讓內(nèi)容中心總能找到與用戶(hù)中心

          • 內(nèi)容中心整合ribbon,實(shí)現(xiàn)負(fù)載均衡

          • 使用feign,讓HTTP的遠(yuǎn)程調(diào)用更加優(yōu)雅

          • 使用sentinel,提升應(yīng)用的可用性以及容錯(cuò)性

          • 使用spring消息編程模型、stream消息編程模型,實(shí)現(xiàn)了基于rocketMQ的通信

          下圖為小程序直接調(diào)用微服務(wù):

          • 認(rèn)證復(fù)雜,登錄需要驗(yàn)證,若使用此模式,則需要在內(nèi)容中心、用戶(hù)中心上做登錄認(rèn)證

          • 導(dǎo)致客戶(hù)端難以重構(gòu),隨著項(xiàng)目迭代,可能需要重新劃分微服務(wù),若微服務(wù)域名什么都變了,則客戶(hù)端就要做大量的改動(dòng)

          • 其他微服務(wù)使用了某種瀏覽器不友好協(xié)議,直接訪(fǎng)問(wèn)訪(fǎng)問(wèn)不了

          使用服務(wù)(API)網(wǎng)關(guān):

          • 可以在API網(wǎng)關(guān)做統(tǒng)一認(rèn)證,再將請(qǐng)求進(jìn)行轉(zhuǎn)發(fā)到后端微服務(wù)

          • 采用這樣的方式,對(duì)外暴露的永遠(yuǎn)是一個(gè)域名,不論內(nèi)部微服務(wù)如何拆分,域名都不會(huì)變,這樣客戶(hù)端重構(gòu)成本大大降低

          • 其他微服務(wù)為瀏覽器不友好協(xié)議,可以在網(wǎng)關(guān)上邊轉(zhuǎn)換為有好的協(xié)議,如HTTP、websocket

          二、spring cloud gateway

          • 是spring cloud的網(wǎng)關(guān)(第二代),未來(lái)取代Zuul(第一代)

          • 基于Netty、Reactor以及WebFlux構(gòu)建
            ① Netty:網(wǎng)絡(luò)通信框架,可以實(shí)現(xiàn)高性能的服務(wù)端以及客戶(hù)端
            ② Reactor:是一個(gè)Reactive模型的編程實(shí)現(xiàn)

          • 優(yōu)點(diǎn):
            ① 性能強(qiáng)勁,是zuul的1.6倍?性能PK
            ② 功能強(qiáng)大,內(nèi)置了很多實(shí)用功能,比如轉(zhuǎn)發(fā)、監(jiān)控、限流等
            ③ 設(shè)計(jì)優(yōu)雅,易擴(kuò)展

          • 缺點(diǎn):
            ① 依賴(lài)Netty與Webflux,不是Servlet編程模型,有一定的學(xué)習(xí)成本
            ② 不能在Servlet容器中工作,無(wú)法構(gòu)建war包(只能打成jar包),部署到tomcat
            ③ 不支持spring boog 1.x

          三、網(wǎng)關(guān)搭建

          • 新建spring boot項(xiàng)目

          • 加依賴(lài)

          ?

          ????org.springframework.cloud
          ????spring-cloud-starter-gateway


          • 加注解:無(wú)

          • 寫(xiě)配置:

          server:
          ??port:?8040

          #?應(yīng)用程序名稱(chēng)
          spring:
          ??application:
          ????name:?gateway
          ??cloud:
          ????#?服務(wù)發(fā)現(xiàn)
          ????nacos:
          ??????discovery:
          ????????server-addr:?localhost:8848
          ????gateway:
          ??????discovery:
          ????????locator:
          ??????????#?讓gateway通過(guò)服務(wù)發(fā)現(xiàn)找到其他的微服務(wù)
          ??????????enabled:?true
          #?actuator
          management:
          ??#?展示詳細(xì)信息
          ??endpoint:
          ????health:
          ??????show-details:?always
          ??#?暴露所有端點(diǎn)
          ??endpoints:
          ????web:
          ??????exposure:
          ????????include:?'*'

          以上,已通過(guò)spring cloud gateway實(shí)現(xiàn)了對(duì)微服務(wù)的反向代理,并且還能總結(jié)轉(zhuǎn)發(fā)規(guī)律

          四、核心概念

          route(路由):spring cloud gateway 基礎(chǔ)元素,可簡(jiǎn)單理解成一條轉(zhuǎn)發(fā)規(guī)則。包含如下

          • id

          • 目標(biāo)url

          • predicate(謂詞):即java.util.function.predicate,spring cloud gateway使用predicate實(shí)現(xiàn)路由的匹配條件

          • filter(過(guò)濾器):修改請(qǐng)求即響應(yīng)

          配置示例:

          1、架構(gòu)

          • gateway client:不是嚴(yán)格意義上的客戶(hù)端,泛指外部請(qǐng)求

          • proxied service:被代理的微服務(wù)

          • gateway mapping:會(huì)判斷請(qǐng)求的路徑是否匹配路由的配置

          • gateway Handler:如果mapping匹配成功,Handler會(huì)讀取這個(gè)路由上的所有過(guò)濾器,然后把請(qǐng)求交給過(guò)濾器處理

          2、內(nèi)置路由謂詞工廠詳解

          (route predicate factories)使用手記

          3、自定義路由謂詞工廠

          • 寫(xiě)配置

          • 代碼示例

          @Component
          public?class?TimeBetweenRoutePredicateFactory?extends?AbstractRoutePredicateFactory?{
          ????public?TimeBetweenRoutePredicateFactory()?{
          ????????super(TimeBetweenConfig.class);
          ????}

          ????@Override
          ????public?Predicate?apply(TimeBetweenConfig?config)?{
          ????????LocalTime?start?=?config.getStart();
          ????????LocalTime?end?=?config.getEnd();
          ????????return?serverWebExchange?->?{
          ????????????LocalTime?now?=?LocalTime.now();
          ????????????return?now.isAfter(start)?&&?now.isBefore(end);
          ????????};
          ????}

          ????@Override
          ????public?List?shortcutFieldOrder()?{
          ????????return?Arrays.asList("start","end");
          ????}
          }

          @Data
          class?TimeBetweenConfig?{
          ????private?LocalTime?start;
          ????private?LocalTime?end;
          }

          配置不生效問(wèn)題解決:對(duì) url:lb://user-center 使用理解錯(cuò)誤

          • 錯(cuò)誤理解是帶user-center都會(huì)匹配此規(guī)則

          • 正確理解是http://localhost:8040將會(huì)被轉(zhuǎn)發(fā)到http://user-center 通過(guò)nacos自動(dòng)獲取地址

          4、內(nèi)置過(guò)濾器工廠

          Spring Cloud Gateway-過(guò)濾器工廠詳解(GatewayFilter Factories)

          5、自定義過(guò)濾器工廠

          • 寫(xiě)配置

          • 代碼示例

          @Slf4j
          @Component
          public?class?PreLogGatewayFilterFactory?extends?AbstractNameValueGatewayFilterFactory?{
          ????public?PreLogGatewayFilterFactory()?{
          ????}

          ????public?GatewayFilter?apply(NameValueConfig?config)?{
          ????????GatewayFilter?filter?=?(((exchange,?chain)?->?{
          ????????????log.info("請(qǐng)求進(jìn)來(lái)了...{}={}",config.getName(),config.getValue());
          ????????????ServerHttpRequest?modifiedRequest?=?exchange.getRequest().mutate().build();
          ????????????ServerWebExchange?modifiedExchange?=?exchange.mutate().request(modifiedRequest).build();
          ????????????return?chain.filter(modifiedExchange);
          ????????}));
          ????????return?new?OrderedGatewayFilter(filter,1000);
          ????}
          }

          6、全局過(guò)濾器

          Spring Cloud Gateway-全局過(guò)濾器(Global Filters)

          過(guò)濾器順序

          • order越小越靠前執(zhí)行

          • 局部過(guò)濾器的order,會(huì)按照配置順序,按1開(kāi)始遞增

          • 若配置了默認(rèn)過(guò)濾器,會(huì)按照配置順序,按1開(kāi)始遞增,默認(rèn)過(guò)濾器會(huì)比局部過(guò)濾器優(yōu)先

          • 如需自行控制order,可返回OrderedGatewayFilter

          五、整合容錯(cuò)服務(wù)

          1、gateway默認(rèn)整合Hystrix,配置如下

          六、監(jiān)控

          Spring Cloud Gateway監(jiān)控

          排錯(cuò)、調(diào)試技巧總結(jié)

          七、限流

          Spring Cloud Gateway限流詳解

          Unable to find GatewayFilterFactory with name RequestRateLimiter報(bào)錯(cuò):

          • 要添加redis依賴(lài)

          • 添加了還報(bào)錯(cuò),仔細(xì)檢查,是否寫(xiě)錯(cuò)位置,寫(xiě)到節(jié)點(diǎn)下

          八、總結(jié)



          版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接和本聲明。

          本文鏈接:

          https://blog.csdn.net/lzf2284466/article/details/109895210






          粉絲福利:實(shí)戰(zhàn)springboot+CAS單點(diǎn)登錄系統(tǒng)視頻教程免費(fèi)領(lǐng)取

          ???

          ?長(zhǎng)按上方微信二維碼?2 秒
          即可獲取資料



          感謝點(diǎn)贊支持下哈?

          瀏覽 90
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产乱妇交换做爰XXXⅩ麻豆 | 免费在线观看亚洲天堂 | 亚洲三级黄色 | 免费日比视频 | 成人色情做爱操女人视频 |