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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

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

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

一、Zuul組件簡介

1、基礎(chǔ)概念

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

2、Zuul的作用

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

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

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

3、案例結(jié)構(gòu)

啟動(dòng)順序如下:

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

啟動(dòng)成功后,注冊中心展示如下:

二、Zuul使用詳解

1、核心依賴

<!-- 路由網(wǎng)關(guān) --> <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# 禁用默認(rèn)路由,執(zhí)行配置的路由ignored-services: "*"routes:# 配置6001接口微服務(wù)pro6001:serviceId: node05-provider-6001path: /api-6001/**# 配置6002接口微服務(wù)pro6002:serviceId: node05-provider-6002path: /api-6002/**
  • 啟動(dòng)類注解:@EnableZuulProxy

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

實(shí)現(xiàn)FallbackProvider接口,自定義響應(yīng)提示。

@Component public class FallBackConfig implements FallbackProvider {private static final Logger LOGGER = LoggerFactory.getLogger(FallBackConfig.class) ;@Overridepublic ClientHttpResponse fallbackResponse(Throwable cause) {// 捕獲超時(shí)異常,返回自定義信息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\": \"微服務(wù)飛出了地球\"\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類,自定義過濾動(dòng)作。

@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)關(guān)配置

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

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

2)測試服務(wù)降級

關(guān)閉6001服務(wù),再次訪問接口,提示信息如下,說明服務(wù)降級策略生效:

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

3)測試過濾器

因?yàn)檎埱骍RI不匹配getAuthorInfo,所以被攔截,說明過濾器略生效:

http://localhost:7002/v1/api-6001/ 響應(yīng)提示: Path Is Error...

三、源代碼地址

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

總結(jié)

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

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