国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置

這篇具有很好參考價(jià)值的文章主要介紹了Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、創(chuàng)建SpringBoot項(xiàng)目

Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
用mavan搭建也可以。(重要的是后面pom里應(yīng)該引入那些依賴(lài),application.yml怎么配置)
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul

Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul

由于開(kāi)始構(gòu)建項(xiàng)目時(shí)選擇了Eureka Server,所以pom.xml中不需要手動(dòng)添加依賴(lài)了

首先在啟動(dòng)類(lèi)SpringcloudApplication中添加EurekaServer的注解:@EnableEurekaServer
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul

二、application.yml

server:
  port: 9000  #eureka注冊(cè)中心服務(wù)端口
 
eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false #不向eureka注冊(cè)中心注冊(cè)。也就是為了關(guān)閉自己向自己注冊(cè),eureka默認(rèn)要向自己注冊(cè)
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
訪問(wèn)注冊(cè)中心:按照配置的端口號(hào)訪問(wèn)。我這里配了9000,端口隨意,如下圖代表Eureka注冊(cè)中心部署成功了。
顯示沒(méi)有實(shí)例在此中心注冊(cè)。沒(méi)事接下來(lái)我們開(kāi)始配置zuul網(wǎng)關(guān),它也是一個(gè)服務(wù)需要注冊(cè)到此注冊(cè)中心來(lái)。
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul

三、提供Service服務(wù)

eurekaservice01,eurekaservice02,eurekaservice03,eurekaservice04,第一個(gè)如下,第二三四個(gè)按著第一個(gè)的建,修改一下名字,端口號(hào)還有方法返回值
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
需要用到mvc
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
服務(wù)提供者同樣需要注冊(cè)到注冊(cè)中心
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul

接下來(lái)是同樣的套路,改yml,啟動(dòng)類(lèi)添加注解:@EnableEurekaClient
yml配置如下(因?yàn)槭菧y(cè)試所有很簡(jiǎn)陋):

server:
  port: 8900 # 服務(wù)提供方
 
# 指定當(dāng)前eureka客戶(hù)端的注冊(cè)地址,
eureka:
  client:
    service-url:
      defaultZone: http://${eureka.instance.hostname}:9000/eureka/
  instance:
    hostname: localhost
 
#當(dāng)前服務(wù)名稱(chēng)
spring:
  application:
    name: eurekaservice1

注意當(dāng)前服務(wù)名稱(chēng)。這里用于注冊(cè)到注冊(cè)中心的名字,還可以啟動(dòng)很多同樣為eurekaservice1的名字的微服務(wù)到注冊(cè)中心,zuul從注冊(cè)中心Eureka Server獲取所有服務(wù)名為eurekaservice01的服務(wù)列表后,會(huì)采用負(fù)載均衡策略訪問(wèn)其中一臺(tái)服務(wù)提供者獲取資源。

下圖我們之前zuul中的配置serviceId就是指向這里的服務(wù)名稱(chēng),這是微服務(wù)調(diào)用的精髓,通過(guò)服務(wù)名調(diào)用。
既然是服務(wù)提供者 ,這里要編寫(xiě)controller類(lèi)了:新建controller包,新建Test01類(lèi),編寫(xiě)REST的方法。返回服務(wù)1
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
按照服務(wù)提供者1的搭建方式,現(xiàn)在搭建服務(wù)提供者2:
同樣是新建模組,名字改為…02,yml配置文件中端口號(hào)與服務(wù)1要不同,服務(wù)名稱(chēng)相同,為了測(cè)試負(fù)載均衡,REST方法返回值設(shè)為服務(wù)2。
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul

server:
  port: 8901 # 服務(wù)提供方
 
# 指定當(dāng)前eureka客戶(hù)端的注冊(cè)地址,
eureka:
  client:
    service-url:
      defaultZone: http://${eureka.instance.hostname}:9000/eureka/
  instance:
    hostname: localhost
 
#當(dāng)前服務(wù)名稱(chēng)
spring:
  application:
    name: eurekaservice1

同樣的方法再建兩個(gè)服務(wù)提供者3和4,服務(wù)名稱(chēng)都為eurekaservice2,端口號(hào)分別為8902,和8903。REST方法返回值分別為,服務(wù)3和服務(wù)4。
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul

四、Zuul網(wǎng)關(guān)服務(wù)

搭建了注冊(cè)中心,和服務(wù)的提供者,我們現(xiàn)在開(kāi)始搭建Zuul網(wǎng)關(guān)服務(wù),最后通過(guò)zuul訪問(wèn)注冊(cè)中心獲取服務(wù)列表,然后訪問(wèn)服務(wù)提供者。
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
這里模組名設(shè)為zuul。包名設(shè)置為zuul,等會(huì)生成的啟動(dòng)類(lèi)就會(huì)是帶有zuul了。EurekaServer也可以這樣只是我開(kāi)始搭的時(shí)候沒(méi)有注意到。
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
要Eureka的客戶(hù)端組件,和zuul組件,點(diǎn)next
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
模組名設(shè)為zuul,不強(qiáng)制
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
項(xiàng)目結(jié)構(gòu):
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
在啟動(dòng)類(lèi)配置注解 @EnableEurekaClient,@EnableZuulProxy,@EnableZuulProxy可以稱(chēng)為@EnableZuulServer的增強(qiáng)版,當(dāng)Zuul與Eureka、Ribbon等組件配合使用時(shí),我們使用@EnableZuulProxy
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
配置pom文件:

Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
啟動(dòng)項(xiàng)目
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
再去注冊(cè)中心看就能看見(jiàn)zuul服務(wù)已經(jīng)被注冊(cè)到注冊(cè)中心了
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul

五、Zuul的訪問(wèn)

有一個(gè)網(wǎng)關(guān)服務(wù)zuul,一個(gè)注冊(cè)中心eurekaserver,4個(gè)服務(wù)提供者eurekaservice,4個(gè)服務(wù)提供者

其中兩個(gè)提供服務(wù)名為eurekaservice1的服務(wù),另外兩個(gè)提供eurekaservice2的服務(wù),現(xiàn)在我們來(lái)啟動(dòng)4個(gè)服務(wù)提供者,在注冊(cè)中心查看,并通過(guò)網(wǎng)關(guān)訪問(wèn)測(cè)試網(wǎng)關(guān)的服務(wù)是否正常。

總項(xiàng)目結(jié)構(gòu):
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
啟動(dòng)后注冊(cè)中心查看:
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul

如之前所想,兩個(gè)服務(wù)名下各兩臺(tái)服務(wù)提供者。
現(xiàn)在回想之前zuul的路由配置:
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
訪問(wèn)zuul網(wǎng)關(guān)的test01/**下的任何服務(wù)都會(huì)給我轉(zhuǎn)發(fā)到服務(wù)名為eurekaservice1下的01和02服務(wù)下。

第一次訪問(wèn):test01
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
第二次訪問(wèn):test01
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
可以看見(jiàn)zuul網(wǎng)關(guān)做了轉(zhuǎn)發(fā)和負(fù)載均衡,使用的是ribbon輪詢(xún)的方式負(fù)載均衡。
那么可以猜想到我們?cè)L問(wèn)test02,zuul網(wǎng)關(guān)會(huì)在服務(wù)名為eurekaservice2的服務(wù)3和服務(wù)4之間去訪問(wèn)了。我們來(lái)看看:
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
至此已經(jīng)實(shí)踐完成zuul網(wǎng)關(guān)的基本功能轉(zhuǎn)發(fā)和負(fù)載均衡。

Zuul網(wǎng)關(guān)的應(yīng)用

通過(guò)zuul訪問(wèn)服務(wù)的,URL地址默認(rèn)格式為:http://zuulHostIp:port/要訪問(wèn)的服務(wù)名稱(chēng)/服務(wù)中的URL

服務(wù)名稱(chēng):properties配置文件中的spring.application.name
服務(wù)的URL:就是對(duì)應(yīng)的服務(wù)對(duì)外提供的URL路徑監(jiān)聽(tīng)

一、網(wǎng)關(guān)依賴(lài)注入

<!-- spring cloud Eureka Client 啟動(dòng)器 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
<!-- zuul網(wǎng)關(guān)的重試機(jī)制,不是使用ribbon內(nèi)置的重試機(jī)制
   是借助spring-retry組件實(shí)現(xiàn)的重試
   開(kāi)啟zuul網(wǎng)關(guān)重試機(jī)制需要增加下述依賴(lài)
 -->
<dependency>
   <groupId>org.springframework.retry</groupId>
   <artifactId>spring-retry</artifactId>
</dependency>

二、啟動(dòng)類(lèi)

/**
 * @EnableZuulProxy - 開(kāi)啟Zuul網(wǎng)關(guān)。
 *  當(dāng)前應(yīng)用是一個(gè)Zuul微服務(wù)網(wǎng)關(guān)。會(huì)在Eureka注冊(cè)中心中注冊(cè)當(dāng)前服務(wù)。并發(fā)現(xiàn)其他的服務(wù)。
 *  Zuul需要的必要依賴(lài)是spring-cloud-starter-zuul。
 */
@SpringBootApplication
@EnableZuulProxy
public class ZuulApplication {
    public static void main(String[] args) {
        SpringApplication.run(ZuulApplication.class, args);
    }
}

三、配置文件:網(wǎng)關(guān)全局變量配置

# URL路徑匹配
# 使用路徑方式匹配路由規(guī)則。
# 參數(shù)key結(jié)構(gòu):zuul.routes.customName.path=xxx
# 用于配置路徑匹配規(guī)則。
# 其中customName自定義。通常使用要調(diào)用的服務(wù)名稱(chēng),方便后期管理
# 可使用的通配符有:* ** ?
# ? 單個(gè)字符
# * 任意多個(gè)字符,不包含多級(jí)路徑
# ** 任意多個(gè)字符,包含多級(jí)路徑
zuul.routes.eureka-application-service.path=/api/**
# 參數(shù)key結(jié)構(gòu):zuul.routes.customName.url=xxx
# url用于配置符合path的請(qǐng)求路徑路由到的服務(wù)地址。
zuul.routes.eureka-application-service.url=http://127.0.0.1:8080/

# 服務(wù)名稱(chēng)匹配
# service id pattern 通過(guò)服務(wù)名稱(chēng)路由
# key結(jié)構(gòu) :zuul.routes.customName.path=xxx
# 路徑匹配規(guī)則  符合path的請(qǐng)求路徑直接路由到customName對(duì)應(yīng)的服務(wù)上
zuul.routes.eureka-application-service.path=/api/**
# key結(jié)構(gòu) :zuul.routes.customName.serviceId=xxx
# serviceId用于配置符合path的請(qǐng)求路徑路由到的服務(wù)名稱(chēng)。如果只配置path,不配置serviceId。則customName相當(dāng)于服務(wù)名稱(chēng)
zuul.routes.eureka-application-service.serviceId=eureka-application-service

# 路由排除配置
# 配置不被zuul管理的服務(wù)列表。多個(gè)服務(wù)名稱(chēng)使用逗號(hào)','分隔。
# 配置的服務(wù)將不被zuul代理。
zuul.ignored-services=eureka-application-service

# 此方式相當(dāng)于給所有新發(fā)現(xiàn)的服務(wù)默認(rèn)排除zuul網(wǎng)關(guān)訪問(wèn)方式,只有配置了路由網(wǎng)關(guān)的服務(wù)才可以通過(guò)zuul網(wǎng)關(guān)訪問(wèn)
# 通配方式配置排除列表。
zuul.ignored-services=*
# 使用服務(wù)名稱(chēng)匹配規(guī)則配置路由列表,相當(dāng)于只對(duì)已配置的服務(wù)提供網(wǎng)關(guān)代理。
zuul.routes.eureka-application-service.path=/api/**

# 通配方式配置排除網(wǎng)關(guān)代理路徑。所有符合ignored-patterns的請(qǐng)求路徑都不被zuul網(wǎng)關(guān)代理。
zuul.ignored-patterns=/**/test/**
zuul.routes.eureka-application-service.path=/api/**

# 路由前綴配置
# prefix URL pattern 前綴路由匹配
# 配置請(qǐng)求路徑前綴,所有基于此前綴的請(qǐng)求都由zuul網(wǎng)關(guān)提供代理。
zuul.prefix=/api
# 使用服務(wù)名稱(chēng)匹配方式配置請(qǐng)求路徑規(guī)則。
# 這里的配置將為:http://ip:port/api/appservice/**的請(qǐng)求提供zuul網(wǎng)關(guān)代理,可以將要訪問(wèn)服務(wù)進(jìn)行前綴分類(lèi)。
# 并將請(qǐng)求路由到服務(wù)eureka-application-service中。
zuul.routes.eureka-application-service.path=/appservice/**

網(wǎng)關(guān)配置方式有多種,默認(rèn)、URL、服務(wù)名稱(chēng)、排除|忽略、前綴。
網(wǎng)關(guān)配置沒(méi)有優(yōu)劣好壞,應(yīng)該在不同的情況下選擇合適的配置方案。

zuul網(wǎng)關(guān)其底層使用ribbon來(lái)實(shí)現(xiàn)請(qǐng)求的路由,并內(nèi)置Hystrix,可選擇性提供網(wǎng)關(guān)fallback邏輯。使用zuul的時(shí)候,并不推薦使用Feign作為application client端的開(kāi)發(fā)實(shí)現(xiàn)。畢竟Feign技術(shù)是對(duì)ribbon的再封裝,使用Feign本身會(huì)提高通訊消耗,降低通訊效率,只在服務(wù)相互調(diào)用的時(shí)候使用Feign來(lái)簡(jiǎn)化代碼開(kāi)發(fā)就夠了。而且商業(yè)開(kāi)發(fā)中,使用Ribbon+RestTemplate來(lái)開(kāi)發(fā)的比例更高。

四、路由網(wǎng)關(guān)過(guò)濾器

Zuul中提供了過(guò)濾器定義,可以用來(lái)過(guò)濾代理請(qǐng)求,提供額外功能邏輯。如:權(quán)限驗(yàn)證,日志記錄等。

Zuul提供的過(guò)濾器是一個(gè)父類(lèi)。父類(lèi)是ZuulFilter。通過(guò)父類(lèi)中定義的抽象方法filterType,來(lái)決定當(dāng)前的Filter種類(lèi)是什么。有前置過(guò)濾、路由后過(guò)濾、后置過(guò)濾、異常過(guò)濾。

  • 前置過(guò)濾:是請(qǐng)求進(jìn)入Zuul之后,立刻執(zhí)行的過(guò)濾邏輯
  • 路由后過(guò)濾:是請(qǐng)求進(jìn)入Zuul之后,并Zuul實(shí)現(xiàn)了請(qǐng)求路由后執(zhí)行的過(guò)濾邏輯,路由后過(guò)濾,是在遠(yuǎn)程服務(wù)調(diào)用之前過(guò)濾的邏輯。
  • 后置過(guò)濾:遠(yuǎn)程服務(wù)調(diào)用結(jié)束后執(zhí)行的過(guò)濾邏輯。
  • 異常過(guò)濾:是任意一個(gè)過(guò)濾器發(fā)生異?;蜻h(yuǎn)程服務(wù)調(diào)用無(wú)結(jié)果反饋的時(shí)候執(zhí)行的過(guò)濾邏輯。無(wú)結(jié)果反饋,就是遠(yuǎn)程服務(wù)調(diào)用超時(shí)。

過(guò)濾器實(shí)現(xiàn)方式

繼承父類(lèi)ZuulFilter。在父類(lèi)中提供了4個(gè)抽象方法,分別是:filterType, filterOrder, shouldFilter, run。其功能分別是:

  • filterType:方法返回字符串?dāng)?shù)據(jù),代表當(dāng)前過(guò)濾器的類(lèi)型。可選值有-pre, route, post, error。pre - 前置過(guò)濾器,在請(qǐng)求被路由前執(zhí)行,通常用于處理身份認(rèn)證,日志記錄等;
  • route - 在路由執(zhí)行后,服務(wù)調(diào)用前被調(diào)用;
  • error - 任意一個(gè)filter發(fā)生異常的時(shí)候執(zhí)行或遠(yuǎn)程服務(wù)調(diào)用沒(méi)有反饋的時(shí)候執(zhí)行(超時(shí)),通常用于處理異常;
  • post - 在route或error執(zhí)行后被調(diào)用,一般用于收集服務(wù)信息,統(tǒng)計(jì)服務(wù)性能指標(biāo)等,也可以對(duì)response結(jié)果做特殊處理。
  • filterOrder:返回int數(shù)據(jù),用于為同filterType的多個(gè)過(guò)濾器定制執(zhí)行順序,返回值越小,執(zhí)行順序越優(yōu)先
  • shouldFilter:返回boolean數(shù)據(jù),代表當(dāng)前filter是否生效
  • run:具體的過(guò)濾執(zhí)行邏輯。如pre類(lèi)型的過(guò)濾器,可以通過(guò)對(duì)請(qǐng)求的驗(yàn)證來(lái)決定是否將請(qǐng)求路由到服務(wù)上;如post類(lèi)型的過(guò)濾器,可以對(duì)服務(wù)響應(yīng)結(jié)果做加工處理(如為每個(gè)響應(yīng)增加footer數(shù)據(jù))。

過(guò)濾器的生命周期
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul

/**
 * Zuul過(guò)濾器,必須繼承ZuulFilter父類(lèi)。
 * 當(dāng)前類(lèi)型的對(duì)象必須交由Spring容器管理。使用@Component注解描述。
 * 繼承父類(lèi)后,必須實(shí)現(xiàn)父類(lèi)中定義的4個(gè)抽象方法。
 * shouldFilter、 run、 filterType、 filterOrder
 */
@Component
public class LoggerFilter extends ZuulFilter {

    private static final Logger logger = LoggerFactory.getLogger(LoggerFilter.class);
    
    /**
     * 返回boolean類(lèi)型。代表當(dāng)前filter是否生效。
     * 默認(rèn)值為false。
     * 返回true代表開(kāi)啟filter。
     */
    @Override
    public boolean shouldFilter() {
        return true;
    }

    /**
     * run方法就是過(guò)濾器的具體邏輯。
     * return 可以返回任意的對(duì)象,當(dāng)前實(shí)現(xiàn)忽略。(spring-cloud-zuul官方解釋?zhuān)?     * 直接返回null即可。
     */
    @Override
    public Object run() throws ZuulException {
        // 通過(guò)zuul,獲取請(qǐng)求上下文
        RequestContext rc = RequestContext.getCurrentContext();
        HttpServletRequest request = rc.getRequest();

        logger.info("LogFilter1.....method={},url={}",
                request.getMethod(),request.getRequestURL().toString());
        // 可以記錄日志、鑒權(quán),給維護(hù)人員記錄提供定位協(xié)助、統(tǒng)計(jì)性能
        return null;
    }

    /**
     * 過(guò)濾器的類(lèi)型??蛇x值有:
     * pre - 前置過(guò)濾
     * route - 路由后過(guò)濾
     * error - 異常過(guò)濾
     * post - 遠(yuǎn)程服務(wù)調(diào)用后過(guò)濾
     */
    @Override
    public String filterType() {
        return "pre";
    }

    /**
     * 同種類(lèi)的過(guò)濾器的執(zhí)行順序。
     * 按照返回值的自然升序執(zhí)行。
     */
    @Override
    public int filterOrder() {
        return 0;
    }
}

五、Zuul網(wǎng)關(guān)的容錯(cuò)(與Hystrix的無(wú)縫結(jié)合)

在spring cloud中,Zuul啟動(dòng)器中包含了Hystrix相關(guān)依賴(lài),在Zuul網(wǎng)關(guān)工程中,默認(rèn)是提供了Hystrix Dashboard服務(wù)監(jiān)控?cái)?shù)據(jù)的(hystrix.stream),但是不會(huì)提供監(jiān)控面板的界面展示??梢哉f(shuō),在spring cloud中,zuul和Hystrix是無(wú)縫結(jié)合的。

1、Zuul中的服務(wù)降級(jí)處理

在Edgware版本之前,Zuul提供了接口ZuulFallbackProvider用于實(shí)現(xiàn)fallback處理。從Edgware版本開(kāi)始,Zuul提供了ZuulFallbackProvider的子接口FallbackProvider來(lái)提供fallback處理。

Zuul的fallback容錯(cuò)處理邏輯,只針對(duì)timeout異常處理,當(dāng)請(qǐng)求被Zuul路由后,只要服務(wù)有返回(包括異常),都不會(huì)觸發(fā)Zuul的fallback容錯(cuò)邏輯。

因?yàn)閷?duì)于Zuul網(wǎng)關(guān)來(lái)說(shuō),做請(qǐng)求路由分發(fā)的時(shí)候,結(jié)果由遠(yuǎn)程服務(wù)運(yùn)算的。那么遠(yuǎn)程服務(wù)反饋了異常信息,Zuul網(wǎng)關(guān)不會(huì)處理異常,因?yàn)闊o(wú)法確定這個(gè)錯(cuò)誤是否是應(yīng)用真實(shí)想要反饋給客戶(hù)端的。

2、代碼示例

/**
 * 如果需要在Zuul網(wǎng)關(guān)服務(wù)中增加容錯(cuò)處理fallback,需要實(shí)現(xiàn)接口ZuulFallbackProvider
 * spring-cloud框架,在Edgware版本(包括)之后,聲明接口ZuulFallbackProvider過(guò)期失效,
 * 提供了新的ZuulFallbackProvider的子接口 - FallbackProvider
 * 在老版本中提供的ZuulFallbackProvider中,定義了兩個(gè)方法。
 *  - String getRoute()
 *    當(dāng)前的fallback容錯(cuò)處理邏輯處理的是哪一個(gè)服務(wù)??梢允褂猛ㄅ浞?’代表為全部的服務(wù)提供容錯(cuò)處理。
 *    如果只為某一個(gè)服務(wù)提供容錯(cuò),返回對(duì)應(yīng)服務(wù)的spring.application.name值。
 *  - ClientHttpResponse fallbackResponse()
 *    當(dāng)服務(wù)發(fā)生錯(cuò)誤的時(shí)候,如何容錯(cuò)。
 * 新版本中提供的FallbackProvider提供了新的方法。
 *  - ClientHttpResponse fallbackResponse(Throwable cause)
 *    如果使用新版本中定義的接口來(lái)做容錯(cuò)處理,容錯(cuò)處理邏輯,只運(yùn)行子接口中定義的新方法。也就是有參方法。
 *    是為遠(yuǎn)程服務(wù)發(fā)生異常的時(shí)候,通過(guò)異常的類(lèi)型來(lái)運(yùn)行不同的容錯(cuò)邏輯。
 */
@Component
public class TestFallBbackProvider implements FallbackProvider {

    /**
     * return - 返回fallback處理哪一個(gè)服務(wù)。返回的是服務(wù)的名稱(chēng)
     * 推薦 - 為指定的服務(wù)定義特性化的fallback邏輯。
     * 推薦 - 提供一個(gè)處理所有服務(wù)的fallback邏輯。
     * 好處 - 服務(wù)某個(gè)服務(wù)發(fā)生超時(shí),那么指定的fallback邏輯執(zhí)行。如果有新服務(wù)上線,未提供fallback邏輯,有一個(gè)通用的。
     */
    @Override
    public String getRoute() {
        return "eureka-application-service";
    }

    /**
     * fallback邏輯。在早期版本中使用。
     * Edgware版本之后,ZuulFallbackProvider接口過(guò)期,提供了新的子接口FallbackProvider
     * 子接口中提供了方法ClientHttpResponse fallbackResponse(Throwable cause)。
     * 優(yōu)先調(diào)用子接口新定義的fallback處理邏輯。
     */
    @Override
    public ClientHttpResponse fallbackResponse() {
        System.out.println("ClientHttpResponse fallbackResponse()");
        
        List<Map<String, Object>> result = new ArrayList<>();
        Map<String, Object> data = new HashMap<>();
        data.put("message", "服務(wù)正忙,請(qǐng)稍后重試");
        result.add(data);
        
        ObjectMapper mapper = new ObjectMapper();
        
        String msg = "";
        try {
            msg = mapper.writeValueAsString(result);
        } catch (JsonProcessingException e) {
            msg = "";
        }
        
        return this.executeFallback(HttpStatus.OK, msg, 
                "application", "json", "utf-8");
    }

    /**
     * fallback邏輯。優(yōu)先調(diào)用??梢愿鶕?jù)異常類(lèi)型動(dòng)態(tài)決定處理方式。
     */
    @Override
    public ClientHttpResponse fallbackResponse(Throwable cause) {
        System.out.println("ClientHttpResponse fallbackResponse(Throwable cause)");
        if(cause instanceof NullPointerException){
            
            List<Map<String, Object>> result = new ArrayList<>();
            Map<String, Object> data = new HashMap<>();
            data.put("message", "網(wǎng)關(guān)超時(shí),請(qǐng)稍后重試");
            result.add(data);
            
            ObjectMapper mapper = new ObjectMapper();
            
            String msg = "";
            try {
                msg = mapper.writeValueAsString(result);
            } catch (JsonProcessingException e) {
                msg = "";
            }
            
            return this.executeFallback(HttpStatus.GATEWAY_TIMEOUT, 
                    msg, "application", "json", "utf-8");
        }else{
            return this.fallbackResponse();
        }
    }
    
    /**
     * 具體處理過(guò)程。
     * @param status 容錯(cuò)處理后的返回狀態(tài),如200正常GET請(qǐng)求結(jié)果,201正常POST請(qǐng)求結(jié)果,404資源找不到錯(cuò)誤等。
     *  使用spring提供的枚舉類(lèi)型對(duì)象實(shí)現(xiàn)。HttpStatus
     * @param contentMsg 自定義的響應(yīng)內(nèi)容。就是反饋給客戶(hù)端的數(shù)據(jù)。
     * @param mediaType 響應(yīng)類(lèi)型,是響應(yīng)的主類(lèi)型, 如:application、text、media。
     * @param subMediaType 響應(yīng)類(lèi)型,是響應(yīng)的子類(lèi)型, 如:json、stream、html、plain、jpeg、png等。
     * @param charsetName 響應(yīng)結(jié)果的字符集。這里只傳遞字符集名稱(chēng),如:utf-8、gbk、big5等。
     * @return ClientHttpResponse 就是響應(yīng)的具體內(nèi)容。
     *  相當(dāng)于一個(gè)HttpServletResponse。
     */
    private final ClientHttpResponse executeFallback(final HttpStatus status, 
            String contentMsg, String mediaType, String subMediaType, String charsetName) {
        return new ClientHttpResponse() {

            /**
             * 設(shè)置響應(yīng)的頭信息
             */
            @Override
            public HttpHeaders getHeaders() {
                HttpHeaders header = new HttpHeaders();
                MediaType mt = new MediaType(mediaType, subMediaType, Charset.forName(charsetName));
                header.setContentType(mt);
                return header;
            }

            /**
             * 設(shè)置響應(yīng)體
             * zuul會(huì)將本方法返回的輸入流數(shù)據(jù)讀取,并通過(guò)HttpServletResponse的輸出流輸出到客戶(hù)端。
             */
            @Override
            public InputStream getBody() throws IOException {
                String content = contentMsg;
                return new ByteArrayInputStream(content.getBytes());
            }

            /**
             * ClientHttpResponse的fallback的狀態(tài)碼 返回String
             */
            @Override
            public String getStatusText() throws IOException {
                return this.getStatusCode().getReasonPhrase();
            }

            /**
             * ClientHttpResponse的fallback的狀態(tài)碼 返回HttpStatus
             */
            @Override
            public HttpStatus getStatusCode() throws IOException {
                return status;
            }

            /**
             * ClientHttpResponse的fallback的狀態(tài)碼 返回int
             */
            @Override
            public int getRawStatusCode() throws IOException {
                return this.getStatusCode().value();
            }

            /**
             * 回收資源方法
             * 用于回收當(dāng)前fallback邏輯開(kāi)啟的資源對(duì)象的。
             * 不要關(guān)閉getBody方法返回的那個(gè)輸入流對(duì)象。
             */
            @Override
            public void close() {
            }
        };
    }
}

六、Zuul網(wǎng)關(guān)的限流保護(hù)

Zuul網(wǎng)關(guān)組件也提供了限流保護(hù)。當(dāng)請(qǐng)求并發(fā)達(dá)到閥值,自動(dòng)觸發(fā)限流保護(hù),返回錯(cuò)誤結(jié)果。只要提供error錯(cuò)誤處理機(jī)制即可。

Zuul的限流保護(hù)需要額外依賴(lài)spring-cloud-zuul-ratelimit組件。

<dependency>
    <groupId>com.marcosbarbero.cloud</groupId>
    <artifactId>spring-cloud-zuul-ratelimit</artifactId>
    <version>1.3.4.RELEASE</version>
</dependency>

1、全局限流配置

使用全局限流配置,zuul會(huì)對(duì)代理的所有服務(wù)提供限流保護(hù)。

# 開(kāi)啟限流保護(hù)
zuul.ratelimit.enabled=true
# 60s內(nèi)請(qǐng)求超過(guò)3次,服務(wù)端就拋出異常,60s后可以恢復(fù)正常請(qǐng)求
zuul.ratelimit.default-policy.limit=3
zuul.ratelimit.default-policy.refresh-interval=60
# 針對(duì)IP進(jìn)行限流,不影響其他IP
zuul.ratelimit.default-policy.type=origin

2、局部限流配置
使用局部限流配置,zuul僅針對(duì)配置的服務(wù)提供限流保護(hù)。

# 開(kāi)啟限流保護(hù)
zuul.ratelimit.enabled=true
# hystrix-application-client服務(wù)60s內(nèi)請(qǐng)求超過(guò)3次,服務(wù)拋出異常。
zuul.ratelimit.policies.hystrix-application-client.limit=3
zuul.ratelimit.policies.hystrix-application-client.refresh-interval=60
# 針對(duì)IP限流。
zuul.ratelimit.policies.hystrix-application-client.type=origin

3、限流參數(shù)簡(jiǎn)介
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul

七、Zuul網(wǎng)關(guān)性能調(diào)優(yōu):網(wǎng)關(guān)的兩層超時(shí)調(diào)優(yōu)

使用Zuul的spring cloud微服務(wù)結(jié)構(gòu)圖:
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
從上圖中可以看出。整體請(qǐng)求邏輯還是比較復(fù)雜的,在沒(méi)有zuul網(wǎng)關(guān)的情況下,app client請(qǐng)求app service的時(shí)候,也有請(qǐng)求超時(shí)的可能。那么當(dāng)增加了zuul網(wǎng)關(guān)的時(shí)候,請(qǐng)求超時(shí)的可能就更明顯了。

當(dāng)請(qǐng)求通過(guò)zuul網(wǎng)關(guān)路由到服務(wù),并等待服務(wù)返回響應(yīng),這個(gè)過(guò)程中zuul也有超時(shí)控制。zuul的底層使用的是Hystrix+ribbon來(lái)實(shí)現(xiàn)請(qǐng)求路由。結(jié)構(gòu)如下:
Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置,spring cloud,微服務(wù),java,zuul
zuul中的Hystrix內(nèi)部使用線程池隔離機(jī)制提供請(qǐng)求路由實(shí)現(xiàn),其默認(rèn)的超時(shí)時(shí)長(zhǎng)為1000毫秒。ribbon底層默認(rèn)超時(shí)時(shí)長(zhǎng)為5000毫秒。如果Hystrix超時(shí),直接返回超時(shí)異常。如果ribbon超時(shí),同時(shí)Hystrix未超時(shí),ribbon會(huì)自動(dòng)進(jìn)行服務(wù)集群輪詢(xún)重試,直到Hystrix超時(shí)為止。如果Hystrix超時(shí)時(shí)長(zhǎng)小于ribbon超時(shí)時(shí)長(zhǎng),ribbon不會(huì)進(jìn)行服務(wù)集群輪詢(xún)重試。

那么在zuul中可配置的超時(shí)時(shí)長(zhǎng)就有兩個(gè)位置:Hystrix和ribbon。具體配置如下:

# 開(kāi)啟zuul網(wǎng)關(guān)重試
zuul.retryable=true
# hystrix超時(shí)時(shí)間設(shè)置
# 線程池隔離,默認(rèn)超時(shí)時(shí)間1000ms
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=8000

# ribbon超時(shí)時(shí)間設(shè)置:建議設(shè)置比Hystrix小
# 請(qǐng)求連接的超時(shí)時(shí)間: 默認(rèn)5000ms
ribbon.ConnectTimeout=5000
# 請(qǐng)求處理的超時(shí)時(shí)間: 默認(rèn)5000ms
ribbon.ReadTimeout=5000
# 重試次數(shù):MaxAutoRetries表示訪問(wèn)服務(wù)集群下原節(jié)點(diǎn)(同路徑訪問(wèn));MaxAutoRetriesNextServer表示訪問(wèn)服務(wù)集群下其余節(jié)點(diǎn)(換臺(tái)服務(wù)器)
ribbon.MaxAutoRetries=1
ribbon.MaxAutoRetriesNextServer=1
# 開(kāi)啟重試
ribbon.OkToRetryOnAllOperations=true

Spring-cloud中的zuul網(wǎng)關(guān)重試機(jī)制是使用spring-retry實(shí)現(xiàn)的。工程必須依賴(lài)下述資源:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-838019.html

<dependency>
  <groupId>org.springframework.retry</groupId>
  <artifactId>spring-retry</artifactId>
</dependency>

到了這里,關(guān)于Spring Cloud 實(shí)戰(zhàn)系列之 Zuul 微服務(wù)網(wǎng)關(guān)搭建及配置的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Spring Cloud實(shí)戰(zhàn)案例 │ Apollo和Zuul的整合開(kāi)發(fā)

    Spring Cloud實(shí)戰(zhàn)案例 │ Apollo和Zuul的整合開(kāi)發(fā)

    Apollo是攜程研發(fā)的開(kāi)源配置管理中心,能夠集中管理應(yīng)用于不同環(huán)境、不同集群的配置,配置修改后能夠?qū)崟r(shí)推送到應(yīng)用端,并且具備規(guī)范的權(quán)限、流程治理等特性。 本案例結(jié)合一個(gè)案例介紹Apollo和Zuul的整合開(kāi)發(fā)。整個(gè)應(yīng)用分為4個(gè)微服務(wù)項(xiàng)目,分別是Eureka服務(wù)器項(xiàng)目mweath

    2024年02月14日
    瀏覽(21)
  • springboot整合spring cloud gateway搭建網(wǎng)關(guān)服務(wù)

    springboot整合spring cloud gateway搭建網(wǎng)關(guān)服務(wù)

    spring cloud netflix zuul、spring cloud gateway是最常見(jiàn)的微服務(wù)網(wǎng)關(guān),通過(guò)網(wǎng)關(guān),我們可以在請(qǐng)求到達(dá)后端指定服務(wù)之前/后端服務(wù)處理完業(yè)務(wù)響應(yīng)數(shù)據(jù)之后對(duì)響應(yīng)進(jìn)行對(duì)請(qǐng)求/響應(yīng)進(jìn)行處理。 比如常見(jiàn)的參數(shù)校驗(yàn)、接口鑒權(quán)等等,在后端服務(wù)的攔截器和過(guò)濾器能做的事在網(wǎng)關(guān)都可以做

    2024年02月07日
    瀏覽(25)
  • Spring Cloud Day2 Nacos配置管理、Feign遠(yuǎn)程調(diào)用與Gateway服務(wù)網(wǎng)關(guān)

    Spring Cloud Day2 Nacos配置管理、Feign遠(yuǎn)程調(diào)用與Gateway服務(wù)網(wǎng)關(guān)

    Nacos除了可以做注冊(cè)中心,同樣可以做配置管理來(lái)使用。 當(dāng)微服務(wù)部署的實(shí)例越來(lái)越多,達(dá)到數(shù)十、數(shù)百時(shí),逐個(gè)修改微服務(wù)配置就會(huì)讓人抓狂,而且很容易出錯(cuò)。我們需要一種統(tǒng)一配置管理方案,可以集中管理所有實(shí)例的配置。 Nacos一方面可以將配置集中管理,另一方可以

    2024年02月10日
    瀏覽(20)
  • Spring Cloud Alibaba 系列之 Gateway(網(wǎng)關(guān))

    Spring Cloud Alibaba 系列之 Gateway(網(wǎng)關(guān))

    網(wǎng)關(guān)作為流量的入口,常用的功能包括路由轉(zhuǎn)發(fā),權(quán)限校驗(yàn),限流等。 Spring Cloud Gateway 是Spring Cloud官方推出的第二代網(wǎng)關(guān)框架,定位于取代 Netflix Zuul1.0。相比 Zuul 來(lái)說(shuō),Spring Cloud ?Gateway 提供更優(yōu)秀的性能,更強(qiáng)大的有功能。 Spring Cloud Gateway 是由 WebFlux + Netty + Reactor 實(shí)現(xiàn)的

    2024年02月10日
    瀏覽(25)
  • spring cloud zuul實(shí)踐

    spring cloud zuul實(shí)踐

    一、 描述 Spring Cloud Zuul是基于Netflix開(kāi)源的Zuul項(xiàng)目構(gòu)建而成,它作為微服務(wù)架構(gòu)中的網(wǎng)關(guān)服務(wù),主要用于實(shí)現(xiàn)動(dòng)態(tài)路由、負(fù)載均衡和請(qǐng)求過(guò)濾等功能。 動(dòng)態(tài)路由:Zuul根據(jù)預(yù)設(shè)的路由規(guī)則將進(jìn)來(lái)的請(qǐng)求路由到相應(yīng)的服務(wù)實(shí)例上。路由規(guī)則可以通過(guò)配置文件或代碼進(jìn)行定義,接

    2024年02月15日
    瀏覽(19)
  • Spring Cloud Zuul 基本原理

    Spring Cloud Zuul 基本原理

    Spring Cloud Zuul 底層是基于Servlet實(shí)現(xiàn)的,核心是通過(guò)一系列的ZuulFilter來(lái)完成請(qǐng)求的轉(zhuǎn)發(fā)。 啟用Zuul作為微服務(wù)網(wǎng)關(guān),需要在Application應(yīng)用類(lèi)加上@EnableZuulProxy注解,而該注解核心是利用@Import注解往Spring容器導(dǎo)入了ZuulProxyConfiguration配置類(lèi) ZuulProxyConfiguration繼承了ZuulConfiguration。 1

    2024年02月07日
    瀏覽(17)
  • Spring cloud教程Gateway服務(wù)網(wǎng)關(guān)

    Spring cloud教程Gateway服務(wù)網(wǎng)關(guān)

    寫(xiě)在前面的話: 本筆記在參考網(wǎng)上視頻以及博客的基礎(chǔ)上,只做個(gè)人學(xué)習(xí)筆記,如有侵權(quán),請(qǐng)聯(lián)系刪除,謝謝! Spring Cloud Gateway 是 Spring Cloud 的一個(gè)全新項(xiàng)目,該項(xiàng)目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等響應(yīng)式編程和事件流技術(shù)開(kāi)發(fā)的網(wǎng)關(guān),它旨在為微服務(wù)架構(gòu)提

    2024年02月08日
    瀏覽(31)
  • Spring Cloud第二季--服務(wù)網(wǎng)關(guān)Gateway

    Spring Cloud第二季--服務(wù)網(wǎng)關(guān)Gateway

    Spring Cloud Gateway是在Spring生態(tài)系統(tǒng)之上構(gòu)建的API網(wǎng)關(guān)服務(wù),基于Spring 5,Spring Boot 2和 Project Reactor等技術(shù)。 Gateway 使用的Webflux中的reactor-netty響應(yīng)式編程組件,底層使用了 Netty 通訊框架。Spring Cloud Gateway能干嘛呢? Gateway是原zuul1.x版的替代。 Spring Cloud Gateway 與 Zuul的區(qū)別: Zuu

    2024年02月03日
    瀏覽(24)
  • 微服務(wù)網(wǎng)關(guān) —— SpringCloud Netflix Zuul

    Spring Cloud Zuul 是 Spring Cloud Netflix 子項(xiàng)目的核心組件之一,可以作為微服務(wù)架構(gòu)中的 API 網(wǎng)關(guān)使用,有以下用途: 鑒權(quán):對(duì)于訪問(wèn)每個(gè)服務(wù)的請(qǐng)求進(jìn)行鑒權(quán),拒絕鑒權(quán)失敗的請(qǐng)求 監(jiān)控:對(duì)系統(tǒng)的請(qǐng)求進(jìn)行監(jiān)控,記錄請(qǐng)求響應(yīng)日志,實(shí)時(shí)統(tǒng)計(jì)當(dāng)前系統(tǒng)的訪問(wèn)量以及監(jiān)控狀態(tài) 壓力

    2024年02月11日
    瀏覽(40)
  • 微服務(wù)·架構(gòu)組件之網(wǎng)關(guān)- Spring Cloud Gateway

    微服務(wù)·架構(gòu)組件之網(wǎng)關(guān)- Spring Cloud Gateway

    微服務(wù)架構(gòu)已成為構(gòu)建現(xiàn)代化應(yīng)用程序的關(guān)鍵范式之一,它將應(yīng)用程序拆分成多個(gè)小型、可獨(dú)立部署的服務(wù)。Spring Cloud Gateway是Spring Cloud生態(tài)系統(tǒng)中的一個(gè)關(guān)鍵組件,用于構(gòu)建和管理微服務(wù)架構(gòu)中的網(wǎng)關(guān)。本報(bào)告旨在調(diào)查和介紹Spring Cloud Gateway的核心概念、架構(gòu)、功能以及其在

    2024年02月09日
    瀏覽(24)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包