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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringCloud微服务(05):Zuul组件,实现路由网关控制

發(fā)布時間:2025/3/17 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringCloud微服务(05):Zuul组件,实现路由网关控制 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、Zuul組件簡介

1、基礎概念

Zuul 網(wǎng)關主要提供動態(tài)路由,監(jiān)控,彈性,安全管控等功能。在分布式的微服務系統(tǒng)中,系統(tǒng)被拆為了多個微服務模塊,通過zuul網(wǎng)關對用戶的請求進行路由,轉發(fā)到具體的后微服務模塊中。

2、Zuul的作用

1)按照不同策略,將請求轉發(fā)到不同的服務上去;

2)聚合API接口,統(tǒng)一對外暴露,提高系統(tǒng)的安全性;

3)實現(xiàn)請求統(tǒng)一的過濾,以及服務的熔斷降級;

3、案例結構

啟動順序如下:

# 注冊中心 node05-eureka-7001 # 兩個服務提供者 node05-provider-6001 node05-provider-6002 # 網(wǎng)關控制 node05-zuul-7002

啟動成功后,注冊中心展示如下:

二、Zuul使用詳解

1、核心依賴

<!-- 路由網(wǎng)關 --> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zuul</artifactId> </dependency>

2、核心配置文件

server:port: 7002 spring:application:name: cloud-node05-parent eureka:instance:prefer-ip-address: trueclient:service-url:defaultZone: http://registry01.com:7001/eureka/ zuul:# 前綴,可以用來做版本控制prefix: /v1# 禁用默認路由,執(zhí)行配置的路由ignored-services: "*"routes:# 配置6001接口微服務pro6001:serviceId: node05-provider-6001path: /api-6001/**# 配置6002接口微服務pro6002:serviceId: node05-provider-6002path: /api-6002/**
  • 啟動類注解:@EnableZuulProxy

3、統(tǒng)一服務降級

實現(xiàn)FallbackProvider接口,自定義響應提示。

@Component public class FallBackConfig implements FallbackProvider {private static final Logger LOGGER = LoggerFactory.getLogger(FallBackConfig.class) ;@Overridepublic ClientHttpResponse fallbackResponse(Throwable cause) {// 捕獲超時異常,返回自定義信息if (cause instanceof HystrixTimeoutException) {return response(HttpStatus.GATEWAY_TIMEOUT);} else {return fallbackResponse();}}private ClientHttpResponse response(final HttpStatus status) {return new ClientHttpResponse() {@Overridepublic HttpStatus getStatusCode() {return status;}@Overridepublic int getRawStatusCode() {return status.value();}@Overridepublic String getStatusText() {return status.getReasonPhrase();}@Overridepublic void close() {LOGGER.info("close");}@Overridepublic InputStream getBody() {String message ="{\n" +"\"code\": 200,\n" +"\"message\": \"微服務飛出了地球\"\n" +"}";return new ByteArrayInputStream(message.getBytes());}@Overridepublic HttpHeaders getHeaders() {HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);return headers;}};}@Overridepublic String getRoute() {return "*";}@Overridepublic ClientHttpResponse fallbackResponse() {return response(HttpStatus.INTERNAL_SERVER_ERROR);} }

4、統(tǒng)一過濾器

繼承ZuulFilter類,自定義過濾動作。

@Component public class FilterConfig extends ZuulFilter {private static final Logger LOGGER = LoggerFactory.getLogger(FilterConfig.class) ;@Overridepublic String filterType() {return "pre";}@Overridepublic int filterOrder() {return 0;}@Overridepublic boolean shouldFilter() {return true;}@Overridepublic Object run() {RequestContext requestContext = RequestContext.getCurrentContext() ;try {doBizProcess(requestContext);} catch (Exception e){LOGGER.info("異常:{}",e.getMessage());}return null;}public void doBizProcess (RequestContext requestContext) throws Exception {HttpServletRequest request = requestContext.getRequest() ;String reqUri = request.getRequestURI() ;if (!reqUri.contains("getAuthorInfo")){requestContext.setSendZuulResponse(false);requestContext.setResponseStatusCode(401);requestContext.getResponse().getWriter().print("Path Is Error...");}} }

5、測試流程

1)測試網(wǎng)關配置

訪問如下接口,響應正常,說明網(wǎng)關配置生效:

http://localhost:7002/v1/api-6001/getAuthorInfo/1 http://localhost:7002/v1/api-6002/getAuthorInfo/2

2)測試服務降級

關閉6001服務,再次訪問接口,提示信息如下,說明服務降級策略生效:

{"code": 200,"message": "微服務飛出了地球" }

3)測試過濾器

因為請求URI不匹配getAuthorInfo,所以被攔截,說明過濾器略生效:

http://localhost:7002/v1/api-6001/ 響應提示: Path Is Error...

三、源代碼地址

GitHub地址:知了一笑 https://github.com/cicadasmile 碼云地址:知了一笑 https://gitee.com/cicadasmile

總結

以上是生活随笔為你收集整理的SpringCloud微服务(05):Zuul组件,实现路由网关控制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。