最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring?cloud?gateway中配置uri三種方式

 更新時(shí)間:2023年08月18日 09:31:04   作者:qq_41482600  
gateway?組件是SpringCloud?組件中的網(wǎng)關(guān)組件,主要是解決路由轉(zhuǎn)發(fā)的問(wèn)題,跟nginx有點(diǎn)類(lèi)似,區(qū)別是nginx多用在前端上,gateway用在后端上,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧

spring cloud gateway中配置uri

gateway中配置uri配置有三種方式:

  • websocket方式:uri: ws://localhost:9000
  • http方式: uri: http://localhost:8130/
  • lb注冊(cè)中心配置方式(注冊(cè)的服務(wù)名稱(chēng)): uri: lb://monitor-ms

gateway的lb方式識(shí)別的服務(wù)名稱(chēng)命名規(guī)則:

"[a-zA-Z]([a-zA-Z]|\\d|\\+|\\.|-)*:.*"

SpringCloud GateWay 使用說(shuō)明

前言:

gateway 組件是SpringCloud 組件中的網(wǎng)關(guān)組件,主要是解決路由轉(zhuǎn)發(fā)的問(wèn)題;跟nginx有點(diǎn)類(lèi)似,區(qū)別是nginx多用在前端上,gateway用在后端上。當(dāng)然gateway的功能不止路由轉(zhuǎn)發(fā),還可以用來(lái):

1.針對(duì)所有請(qǐng)求做統(tǒng)一鑒權(quán)、限流、熔斷、日志;

2.協(xié)議轉(zhuǎn)化,針對(duì)后端多種協(xié)議可以在網(wǎng)關(guān)層統(tǒng)一處理后以http對(duì)外服務(wù);

3.統(tǒng)一錯(cuò)誤代碼處理(跟springboot統(tǒng)一錯(cuò)誤處理配置一樣);

一、配置說(shuō)明

gateway的配置文件是其使用的核心。

spring:
cloud:
gateway:
routes:
- id: table-service
uri: lb://table-service
predicates:
- Path=/table-service/**
filters:
- StripPrefix=1

字段說(shuō)明:

id:自定義路由的ID;

uri:目標(biāo)服務(wù)器地址,同時(shí)支持 URI(http://ip:port/route) 和 lb(lb://應(yīng)用注冊(cè)服務(wù)名) 方式,推薦使用lb方式;

predicates:路由條件,根據(jù)匹配結(jié)果決定是否執(zhí)行該請(qǐng)求路由;

filters:過(guò)濾規(guī)則,包含 pre 和 post 過(guò)濾,其中 StripPrefix=1 表示根據(jù)請(qǐng)求時(shí)去掉URL路徑的第一個(gè)前綴。

二、路由條件配置說(shuō)明

即predicates 配置項(xiàng),支持多種規(guī)則:

1. 指定時(shí)間規(guī)則匹配路由

時(shí)間的書(shū)寫(xiě)必須是ZoneDateTime格式。

spring:
cloud:
gateway:
routes:
- id: table-service
uri: lb://table-service
predicates:
- After=2022-07-20T10:25:00.000+08:00[Asia/Shanghai]

有三種規(guī)則:

After:指定時(shí)間之后轉(zhuǎn)發(fā)到該服務(wù);

Before:指定時(shí)間之前轉(zhuǎn)發(fā)到該服務(wù);

Between:兩個(gè)時(shí)間之前轉(zhuǎn)發(fā)到該服務(wù),兩個(gè)時(shí)間之間用逗號(hào)隔開(kāi);

2. Cookie 匹配路由

spring:
cloud:
gateway:
routes:
- id: table-service
uri: lb://table-service
predicates:
- Cookie=cho,123

上述配置表示請(qǐng)求時(shí)Cookie 必須攜帶 cho=123 鍵值對(duì)才能轉(zhuǎn)發(fā)到該服務(wù);逗號(hào)前表示鍵值,逗號(hào)后表示該鍵對(duì)應(yīng)的值,該值是個(gè)正則表達(dá)式。

3. Header 匹配路由

spring:
cloud:
gateway:
routes:
- id: table-service
uri: lb://table-service
predicates:
- Header=cho,123

上述配置表示請(qǐng)求時(shí)header 必須攜帶 cho=123 鍵值對(duì)才能轉(zhuǎn)發(fā)到該服務(wù);逗號(hào)前表示鍵值,逗號(hào)后表示該鍵對(duì)應(yīng)的值,該值是個(gè)正則表達(dá)式。

4. Host 匹配路由

spring:
cloud:
gateway:
routes:
- id: table-service
uri: lb://table-service
predicates:
- Host=127.0.0.1,localhost

上述配置表示請(qǐng)求時(shí)Host 必須攜帶 127.0.0.1,localhost 中的任何一個(gè)值才能轉(zhuǎn)發(fā)到該服務(wù);匹配多值時(shí)用逗號(hào)隔開(kāi),并且支持星號(hào)(*)做域名通配符。

5. 請(qǐng)求方法匹配路由

spring:
cloud:
gateway:
routes:
- id: table-service
uri: lb://table-service
predicates:
- Method=POST,GET

上述配置表示請(qǐng)求時(shí)只有 GET 和 POST 方法才能轉(zhuǎn)發(fā)到該服務(wù);匹配多值時(shí)用逗號(hào)隔開(kāi)。

6. 請(qǐng)求路徑匹配路由

spring:
cloud:
gateway:
routes:
- id: table-service
uri: lb://table-service
predicates:
- Path=/table/**

該方式是使用最多的。/* 表示單層路徑匹配,/** 表示多層路徑匹配。

三、過(guò)濾配置說(shuō)明

即filters 配置項(xiàng),支持多種配置:

1. AddRequestParameters GatewayFilter Factory

spring:
cloud:
gateway:
routes:
- id: table-service
uri: lb://table-service
predicates:
- Path=/table/**
filters:
- AddRequestParameter=foo,bar

上述配置會(huì)對(duì)走該路由的所有請(qǐng)求都加上 foo=bar 參數(shù)。

2. AddResponseHeader GatewayFilter Factory

spring:
cloud:
gateway:
routes:
- id: table-service
uri: lb://table-service
predicates:
- Path=/table/**
filters:
- AddResponseHeader=foo,bar

上述配置會(huì)對(duì)走該路由的所有請(qǐng)求的返回都加上響應(yīng)頭foo=bar 。

3. RequestRateLimiter GatewayFilter Factory

spring:
cloud:
gateway:
routes:
- id: table-service
uri: lb://table-service
predicates:
- Path=/table/**
filters:
- name: RequestRateLimiter
args:
redis-rate-limiter.replenishRate: 10
redis-rate-limiter.burstCapacity: 20

這個(gè)過(guò)濾器是基于令牌桶實(shí)現(xiàn)的,replenishRate 表示令牌填充速度,burstCapacity 表示令牌桶容量;限流用的,需要集成redis才行。限流的使用略復(fù)雜,建議單獨(dú)研究。

4. Retry GatewayFilter Factory

spring:
cloud:
gateway:
routes:
- id: table-service
uri: lb://table-service
predicates:
- Path=/table/**
filters:
- name: Retry
args:
retries: 3
status: 503

總共涉及4個(gè)參數(shù):

retries:重試次數(shù);

status:http 請(qǐng)求返回的狀態(tài)碼,上述配置表示服務(wù)端返回503時(shí)發(fā)起重試;

methods:指定請(qǐng)求類(lèi)型才會(huì)發(fā)起重試;

series:配置錯(cuò)誤碼段,表示符合狀態(tài)碼才發(fā)起重試,默認(rèn)SERVER_ERROR(5),即 5xx 段狀態(tài)碼才會(huì)發(fā)起重試;如果 series 配置了錯(cuò)誤碼,但 status 缺省,則仍然匹配 series 進(jìn)行重試。

四、自定義 Filter

自定義 filter 有兩個(gè),GlobalFilter 和 GatewayFilter ;GlobalFilter 對(duì)全局生效,GatewayFilter 只對(duì)配置了的才生效。

1. 自定義GlobalFilter

可以存在多個(gè)GlobalFilter,執(zhí)行順序由 getOrder() 控制,值越小執(zhí)行越靠前。

@Slf4j
@Service
public class GatewayGlobalFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
ServerHttpResponse response = exchange.getResponse();
log.info("pre action..."); //請(qǐng)求到路由前的操作...
return chain.filter(exchange).then(Mono.fromRunnable(() -> {
log.info("post action..."); //請(qǐng)求返回后的操作...
}));
}
@Override
public int getOrder() {
return 0;
}
}

2. 自定義 gatewayFilter

@Slf4j
@Service
public class CustomGatewayFilterFactory extends AbstractGatewayFilterFactory<CustomGatewayFilterFactory.CustomConfig> {
public CustomGatewayFilterFactory() {
super(CustomConfig.class);
}
@Override
public GatewayFilter apply(CustomConfig config) {
return ((exchange, chain) -> {
String name = config.getName();
log.info("config name:{}", name);
log.info("pre action...");
if (name.equals("123")) {                           // 使用config值的樣例
return exchange.getResponse().setComplete();    // 不返回任何信息
}
return chain.filter(exchange).then(Mono.fromRunnable(() -> {
log.info("post action...");
}));
});
}
public static class CustomConfig {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}

上述對(duì)應(yīng)的配置文件:

spring:
cloud:
gateway:
routes:
- id: table-service
uri: lb://table-service
predicates:
- Path=/table/**
filters:
- name: Custom
args:
name: 123

幾點(diǎn)注意:

1. 類(lèi)名一般遵循以 GatewayFilterFactory 結(jié)尾,所以默認(rèn)情況下過(guò)濾器 name 會(huì)采用該自定義類(lèi)名的前綴,這里配置 name=Custom;或者類(lèi)名完全不遵循上述規(guī)則,,配置時(shí)name為類(lèi)全名;

2. 在 apply 方法中,同時(shí)包含 Pre 和 Post 過(guò)濾;在 then 方法中是請(qǐng)求執(zhí)行結(jié)束之后的處置;

3. CustomConfig 是一個(gè)配置類(lèi),其屬性值可在配置文件 args 下一層進(jìn)行配置;

3. 補(bǔ)充

以下是請(qǐng)求不滿(mǎn)足條件時(shí)的json 返回。

// msg 是個(gè) json 字符串
DataBuffer bodyDataBuffer =response.bufferFactory().wrap(msg.getBytes(StandardCharsets.UTF_8));
return response.writeWith(Mono.just(bodyDataBuffer));

五、整個(gè) demo

1. 本地起一個(gè)eureka的注冊(cè)中心(也可以用nacos等其他的注冊(cè)中心)

端口:9099

本片代碼不是該博客核心,忽略。

2. 起一個(gè)gateway的client注冊(cè)到eureka

依賴(lài):

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>eureka-gateway</artifactId>
<version>1.0.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
<relativePath/>
</parent>
<dependencies>
<!--在springboot的pom文件中,該依賴(lài)已經(jīng)集成了springMVC等web啟動(dòng)器,不需要再添加spring-boot-starter-web 依賴(lài)了-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--eureka-client依賴(lài)-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2020.0.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>

啟動(dòng)類(lèi):

@EnableEurekaClient
@SpringBootApplication
public class GatewayServer {
public static void main(String[] args) {
SpringApplication.run(GatewayServer.class, args);
}
}

配置文件:

server:
port: 8999
spring:
application:
name: gateway-service
cloud:
gateway:
routes:
- id: table-service
uri: lb://table-service
predicates:
- Path=/table-service/**
filters:
- StripPrefix=1
- id: table-service
uri: lb:ws://table-service    #這是websocket轉(zhuǎn)發(fā)的配置
predicates:
- Path=/table-socket/**
filters:
- StripPrefix=1
eureka:
instance:
lease-expiration-duration-in-seconds: 10
lease-renewal-interval-in-seconds: 5
prefer-ip-address: true
instance-id: ${spring.cloud.client.ip-address}:${server.port}
client:
service-url:
defaultZone: http://user:passwd@localhost:9099/eureka/

到此這篇關(guān)于spring cloud gateway中配置uri三種方式的文章就介紹到這了,更多相關(guān)spring cloud gateway配置uri內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MyBatis Log Free插件IDE下載與使用方式

    MyBatis Log Free插件IDE下載與使用方式

    這篇文章主要介紹了MyBatis Log Free插件IDE下載與使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • springboot打包實(shí)現(xiàn)項(xiàng)目JAR包和依賴(lài)JAR包分離

    springboot打包實(shí)現(xiàn)項(xiàng)目JAR包和依賴(lài)JAR包分離

    這篇文章主要介紹了springboot打包實(shí)現(xiàn)項(xiàng)目JAR包和依賴(lài)JAR包分離,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java無(wú)法輸出中文問(wèn)題及解決

    Java無(wú)法輸出中文問(wèn)題及解決

    這篇文章主要介紹了Java無(wú)法輸出中文問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Java ResourceBundle案例詳解

    Java ResourceBundle案例詳解

    這篇文章主要介紹了Java ResourceBundle案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java SpringBoot自動(dòng)配置原理詳情

    Java SpringBoot自動(dòng)配置原理詳情

    這篇文章主要介紹了Java SpringBoot自動(dòng)配置原理詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-07-07
  • IDEA 配合 Dockerfile 部署 SpringBoot 工程的注意事項(xiàng)

    IDEA 配合 Dockerfile 部署 SpringBoot 工程的注意事項(xiàng)

    這篇文章主要介紹了IDEA 配合 Dockerfile 部署 SpringBoot 工程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • springboot配置多數(shù)據(jù)源并集成Druid和mybatis的操作

    springboot配置多數(shù)據(jù)源并集成Druid和mybatis的操作

    這篇文章主要介紹了springboot配置多數(shù)據(jù)源并集成Druid和mybatis的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 兩種JAVA實(shí)現(xiàn)短網(wǎng)址服務(wù)算法

    兩種JAVA實(shí)現(xiàn)短網(wǎng)址服務(wù)算法

    這篇文章介紹了兩種JAVA實(shí)現(xiàn)短網(wǎng)址服務(wù)算法,一種是基于MD5碼的,一種是基于自增序列的,需要的朋友可以參考下
    2015-07-07
  • springboot依靠security實(shí)現(xiàn)digest認(rèn)證的實(shí)踐

    springboot依靠security實(shí)現(xiàn)digest認(rèn)證的實(shí)踐

    HTTP摘要認(rèn)證通過(guò)加密參數(shù)(如nonce、response)驗(yàn)證身份,避免明文傳輸,但存在密碼存儲(chǔ)風(fēng)險(xiǎn),相比基本認(rèn)證更安全,卻因?qū)崿F(xiàn)復(fù)雜且不支持Remember-me,未被廣泛采用,測(cè)試案例顯示其工作流程
    2025-09-09
  • Java 8中日期和時(shí)間的處理方法

    Java 8中日期和時(shí)間的處理方法

    Java 8新增了LocalDate和LocalTime接口,接下來(lái)通過(guò)本文給大家介紹Java 8中日期和時(shí)間的處理方法,非常不錯(cuò),感興趣的朋友一起看下吧
    2016-08-08

最新評(píng)論

福海县| 怀柔区| 巴楚县| 怀来县| 福建省| 民乐县| 宜兰市| 灯塔市| 赤水市| 响水县| 都兰县| 梁河县| 疏附县| 抚顺县| 九寨沟县| 全椒县| 镇远县| 嘉义县| 外汇| 曲阳县| 肃宁县| 黔东| 永定县| 娄底市| 和平县| 沙雅县| 丽水市| 冀州市| 柞水县| 兴安县| 丰顺县| 澳门| 铜梁县| 鄂伦春自治旗| 托克托县| 应用必备| 紫阳县| 寻乌县| 曲水县| 马公市| 鄂托克前旗|