日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

gateway路由网关,zuul的替代品

發布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gateway路由网关,zuul的替代品 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
zuul1 low, zuul2 還沒長大呢,不敢用。 gateway 基于netty, spring flux, reactor 異步非阻塞, 快呀。 與spring良好整合, spring社區的呢。官方推薦。

https://spring.io/projects/spring-cloud-gateway


https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/

gateway

  • 特性
  • 網關的三大核心對象
  • 入門配置
  • 斷言配置
  • 支持自定義過濾器

特性

Spring Cloud Gateway 使用的Webflux中的reactor-netty響應式編程組件,底層使用了Netty通訊框架.

1. 基于spring5.0 reactor, boot2.x 2. 能夠轉發所有請求的路由 反向代理 3. 路由支持斷言和過濾器 4. 熔斷 5. 服務發現 客戶端 6. 簡單斷言和過濾器 7. 能限制請求 8. 根據路徑轉發日志監控.. 流量控制.. 鑒權..

網關在微服務的哪個地方, nginx后面就是。


網關的三大核心對象

路由Route

路由是構建網關的基本模塊,它由ID,目標URI,一系列的斷言和過濾器組成,如果斷言為true則匹配該路由。

route --> 根據規則將請求轉發到對應的微服務。

斷言Predicate

參考的是java8的java.util.function.Predicate開發人員可以匹配HTTP請求中的所有內容(例如請求頭或請求參數),如果請求與斷言相匹配則進行路由。

可以設置對應的規則來設置斷言。符合規則轉發請求, 不符合可以做出對應處理。

過濾 filter

指的是Spring框架中GatewayFilter的實例,使用過濾器,可以在請求被路由前或者之后對請求進行修改。

java web 中的過濾器, 過濾器鏈, 懂吧。

入門配置

pom

<!--新增gateway 需要排除web和actuator 2.2.1.RELEASE --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>

routes 下面可以配置多個路由路徑。‘

使用yaml配置路由

# gateway --> 路由 斷言 過濾器 server:port: 9527# 網關配置 spring:application:name: cloud-gatewaycloud:gateway:discovery:locator:enabled: true # 開啟從注冊中心獲取動態路由的功能。利用微服務名進行路由。routes:- id: payment_routh1 # 路由的id 沒有固定規則但是要求唯一 配合服務名稱# uri: http://localhost:8001 # 匹配后提供服務的路由地址uri: lb://cloud-payment-service # 根據服務名進行路由predicates:- Path=/payment/get/** # 路徑像匹配的進行斷言~

使用bean的方式配置路由

package top.bitqian.springcloud.config;import org.springframework.cloud.gateway.route.RouteLocator; import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;/*** 網關規則bean配置* @author echo lovely* @date 2020/12/12 16:53*/@Configuration public class GatewayConfig {// 可以配置多個bean, 根據規則跳轉到不同的url@Beanpublic RouteLocator customerRouteLocator(RouteLocatorBuilder routeBuilder) {RouteLocatorBuilder.Builder routes = routeBuilder.routes();routes.route("adorable1",r -> r.path("/team"). // localhost:9527/teamuri("https://github.com/team")). // to teambuild();return routes.build();}@Beanpublic RouteLocator customerRouteLocator1(RouteLocatorBuilder routeBuilder) {RouteLocatorBuilder.Builder routes = routeBuilder.routes();routes.route("adorable2",r -> r.path("/explore"). // localhost:9527/exploreuri("https://github.com/explore")). // to explorebuild();return routes.build();}}

斷言配置

https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/#gateway-request-predicates-factories

支持cookie, 請求頭, 請求方法,請求參數, 請求時間…

可以本地使用curl來測試, 像linux curl localhost:8080

# gateway --> 路由 斷言 過濾器 server:port: 9527# 網關配置 spring:application:name: cloud-gatewaycloud:gateway:discovery:locator:enabled: true # 開啟從注冊中心獲取動態路由的功能。利用微服務名進行路由。routes:- id: payment_routh1 # 路由的id 沒有固定規則但是要求唯一 配合服務名稱# uri: http://localhost:8001 # 匹配后提供服務的路由地址uri: lb://cloud-payment-service # 根據服務名進行路由predicates:- Path=/payment/get/** # 路徑像匹配的進行斷言~- id: payment_routh2 # 路由的id 沒有固定規則但是要求唯一 配合服務名稱# uri: http://localhost:8001 # 匹配后提供服務的路由地址uri: lb://cloud-payment-servicepredicates:- Path=/payment/lb/** # 路徑像匹配的進行斷言~# 新增斷言配置# https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/#gateway-request-predicates-factories- After=2020-12-13T11:37:03.340+08:00[Asia/Shanghai] # 必須在這個時間之后# - Cookie=username, adorable # 測試 curl --cookie "username=adorable" localhost:9527/payment/lb# - Header=X-Request-Id, \d+ # 屬性必須是整數 curl --header "X-Request-Id:99" localhost:9527/payment/lb# - Query=age # curl localhost:9527/payment/lb?age=19# - Host=**.adorable.cn,**.adorable.top # curl localhost:9527/payment/lb -H "host:bitqian.lovely.adorable.top"# gateway 入駐eureka~ eureka:instance:hostname: cloud-gateway-serviceclient:service-url:register-with-eureka: truefetch-registry: truedefaultZone: http://eureka7001.com:7001/eureka

支持自定義過濾器

package top.bitqian.springcloud.filter;import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework.core.Ordered; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono;import java.util.Date;/*** 網關自定義過濾器配置* 官方有兩種過濾器, 單一的和全局的。* @author echo lovely* @date 2020/12/13 14:37*/@Component @Slf4j public class MyGatewayFilter implements GlobalFilter, Ordered { // global filter...@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {log.info("=======================gateway進來了======" + new Date());// 獲取到請求中的參數String username = exchange.getRequest().getQueryParams().getFirst("username");if (username == null) {log.info("/(ㄒoㄒ)/~~ 用戶名為空了,非法的用戶名稱......");// 406 不被服務器接受的exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);// 返回monoreturn exchange.getResponse().setComplete();}// 放行return chain.filter(exchange);}@Overridepublic int getOrder() {// 數字越小, 越優先return 0;} }

總之網關作為分布式,微服務架構 在安全,限流,日志記錄方面具有強大的功能。

總結

以上是生活随笔為你收集整理的gateway路由网关,zuul的替代品的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。