【Java进阶】Spring Cloud中Zuul配置与案例实现
目錄
- Zuul是什么
- zuul 能做什么
- 過濾器的生命周期
- zuul組件
- 搭建一個注冊Eureka中心的Web服務
- 項目截圖
- pom
- application.yml配置
- 啟動項ZuulApplication_9527
- 運行界面
- 服務端
- Eureka界面
- 配置Zuul路由網關后
Zuul是什么
zuul 是netflix開源的一個API Gateway 服務器, 本質上是一個web servlet應用。
Zuul 在云平臺上提供動態路由,監控,彈性,安全等邊緣服務的框架。Zuul 相當于是設備和 Netflix 流應用的 Web 網站后端所有請求的前門。
zuul的例子可以參考 netflix 在github上的 simple webapp,可以按照netflix 在github wiki 上文檔說明來進行使用。
https://github.com/Netflix/zuul/wiki
注意: Zuul服務最終還是會注冊到Eureka
提供: 代理 + 路由 + 過濾 三大功能!
zuul的核心是一系列的filters, 其作用類比Servlet框架的Filter,或者AOP。zuul把請求路由到用戶處理邏輯的過程中,這些filter參與一些過濾處理,比如Authentication,Load Shedding等
zuul 能做什么
Zuul可以通過加載動態過濾機制,從而實現以下各項功能(路由、過濾):
- 驗證與安全保障: 識別面向各類資源的驗證要求并拒絕那些與要求不符的請求。
- 審查與監控: 在邊緣位置追蹤有意義數據及統計結果,從而為我們帶來準確的生產狀態結論。
- 動態路由: 以動態方式根據需要將請求路由至不同后端集群處。
- 壓力測試: 逐漸增加指向集群的負載流量,從而計算性能水平。
- 負載分配: 為每一種負載類型分配對應容量,并棄用超出限定值的請求。
- 靜態響應處理: 在邊緣位置直接建立部分響應,從而避免其流入內部集群。
- 多區域彈性: 跨越AWS區域進行請求路由,旨在實現ELB使用多樣化并保證邊緣位置與使用者盡可能接近。
過濾器的生命周期
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-6xk9pl8e-1618991362845)(https://imgkr2.cn-bj.ufileos.com/9f2bd698-f897-4801-8e1c-e8aa5c29b3c2.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=KzhanZPLIVzv5sz%252BAbRldoMoMgE%253D&Expires=1601351961)]
zuul組件
- zuul-core–zuul核心庫,包含編譯和執行過濾器的核心功能。
- zuul-simple-webapp–zuul Web應用程序示例,展示了如何使用zuul-core構建應用程序。
- zuul-netflix–lib包,將其他NetflixOSS組件添加到Zuul中,例如使用功能區進去路由請求處理。
- zuul-netflix-webapp–webapp,它將zuul-core和zuul-netflix封裝成一個簡易的webapp工程包。
搭建一個注冊Eureka中心的Web服務
項目截圖
pom
<?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"><parent><artifactId>springcloud</artifactId><groupId>cn.com.codingce</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>springcloud-zuul-9527</artifactId><dependencies><!--Zuul--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zuul</artifactId><version>1.4.6.RELEASE</version></dependency><!--Hystrix依賴--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-hystrix</artifactId><version>1.4.6.RELEASE</version></dependency><!--Hystrix監控--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-hystrix-dashboard</artifactId><version>1.4.6.RELEASE</version></dependency><!--我們需要拿到實體類, 所以要配置api -module--><dependency><groupId>cn.com.codingce</groupId><artifactId>springcloud-api</artifactId><version>1.0-SNAPSHOT</version></dependency><!--熱部署工具--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--Ribbon--><!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-ribbon --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-ribbon</artifactId><version>1.4.6.RELEASE</version></dependency><!--Eureka 客戶端--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId><version>1.4.6.RELEASE</version></dependency></dependencies> </project>application.yml配置
server:port: 9527 spring:application:name: springcloud-zuuleureka:client:service-url:defaultZone: http://eureka7002.com:7002/eureka/, http://eureka7003.com:7003/eureka/, http://eureka7001.com:7001/eureka/ # 這里必須與服務端一致instance:instance-id: zuul9527.comprefer-ip-address: true# info 配置 info:app.name: codingce-springcloudcpmany.name: i.codingce.com.cnauthor: xzMhehe# 路由網關配置 我們需要設置原路徑不能訪問, 僅可使用Zuul路由網關配置的 路徑 (已在 win10 hosts 里面配置 127.0.0.1 www.codingce.com) zuul:routes:mydept.serviceId: springcloud-provider-deptmydept.path: /mydept/**ignored-services: springcloud-provider-dept # 不能在使用這個路徑訪問了 ignored-services: "*" 隱藏全部的真實的項目prefix: /mxz # 設置公共的前綴 可有可無 原 http://www.codingce.com:9527/mydept/dept/list 加了之后 http://www.codingce.com:9527/mxz/mydept/dept/list啟動項ZuulApplication_9527
package cn.com.codingce.springcloud;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.zuul.EnableZuulProxy;@SpringBootApplication @EnableZuulProxy //一般用代理 @EnableZuulProxy public class ZuulApplication_9527 {public static void main(String[] args) {SpringApplication.run(ZuulApplication_9527.class, args);} }運行界面
服務端
Eureka界面
配置Zuul路由網關后
文章已上傳gitee https://gitee.com/codingce/hexo-blog
項目地址: https://github.com/xzMhehe/codingce-java
總結
以上是生活随笔為你收集整理的【Java进阶】Spring Cloud中Zuul配置与案例实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【算法】两数之和
- 下一篇: 4个足球队打小组单循环