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

歡迎訪問 生活随笔!

生活随笔

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

javascript

API网关—Spring Cloud Zuul

發布時間:2024/4/15 javascript 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 API网关—Spring Cloud Zuul 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文作者:思想者

原文地址:一起學習使用Spring Cloud Netflix之Zuul

?

前言

Zuul在Spring Cloud 體系中扮演著統一網關的角色,負責與外部交互。用戶可以通過不同的URL特征來訪問不同的后端服務,類似于Nginx代理的效果。Zuul與Eureka結合使用,可以根據服務名來訪問后端的服務,對于Eureka而言,Zuul也是一個Eureka Client。系統的信息流入流出都需要經過Zuul,在Zuul中,我們可以統一監控流量,統一安全認證,統一報文組裝等等。本文來源于我的博客網站:http://51think.net

1、Zuul架構

從圖中可以看到,之前博客中提到的srping-cloud-ribbon-client應用以及spring-cloud-eureka-myservice應用都有參與。這兩個應用和spring-cloud-zuul都屬于Eureka的client,因此都需要在Eureka中進行注冊,否則無法相互調用。

2、創建Zuul應用

1)IDEA創建module,選擇Zuul?

2)pom文件中添加web組件以及Eureka組件

<?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><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.6.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>spring-cloud-zuul</artifactId><version>0.0.1-SNAPSHOT</version><name>spring-cloud-zuul</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><spring-cloud.version>Greenwich.SR2</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-zuul</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

3)applicaton類加上注解@EnableZuulProxy和@EnableEurekaClient,開啟Zuul功能

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

4)修改application.yml文件

eureka:client:serviceUrl:defaultZone: http://localhost:8010/eureka/ server:port: 8030 spring:application:name: cloudZuul zuul:routes:ribbonClient:path: /ribbonClient/**serviceId: ribbonClient

其中 path: /ribbonClient/**表示URL中如果帶有/ribbonClient/將被代理到serviceId為ribbonClient的服務中去。

3、啟動觀察

啟動spring-cloud-zuul之后,訪問Eureka面板,觀察cloudZuul是否在服務列表中。

在之前的ribbon博客中,我們的訪問地址是http://localhost:8020/sayHello?say=helloWorld,現在我們通過Zuul來訪問spring-cloud-ribbon-client應用,在瀏覽器中使用此地址進行訪問:http://localhost:8030/ribbonClient/sayHello?say=helloWorld,可以發現訪問效果和直接訪問http://localhost:8020/sayHello?say=helloWorld的效果是一致的

4、使用服務過濾

服務過濾就是一個filter,它可以在指定事件中(路由前,路由中,路由后等)執行相關操作。Zuul中提供了一個filter接口,實現它即可

@Component public class TokenFilter extends ZuulFilter {@Overridepublic String filterType() {return "pre";}@Overridepublic int filterOrder() {return 0;}@Overridepublic boolean shouldFilter() {return true;}@Overridepublic Object run() {RequestContext ctx = RequestContext.getCurrentContext();HttpServletRequest request = ctx.getRequest();Object accessToken = request.getParameter("token");if(accessToken == null) {ctx.setSendZuulResponse(false);ctx.setResponseStatusCode(401);try {ctx.getResponse().getWriter().write("token is not exist!");}catch (Exception e){}return null;}return null;} }

這段代碼表示,如果請求中沒有token信息,就會報錯“token is not exist!”。關注filterType字段,它代表過濾器的類型,具體如下:?

  • pre:路由之前會調用?
  • route:路由轉發的時候會調用?
  • error:處理請求時發生錯誤時會調用?
  • post:運行結束被調用

我們再次重啟一下spring-cloud-zuul,瀏覽器再次訪問http://localhost:8030/ribbonClient/sayHello?say=helloWorld,會發現如下錯誤提示:

加上token參數之后,即可正常訪問:

總結

以上是生活随笔為你收集整理的API网关—Spring Cloud Zuul的全部內容,希望文章能夠幫你解決所遇到的問題。

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