亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Spring Cloud入門教程之Zuul實現API網關與請求過濾

2024-07-14 08:40:40
字體:
來源:轉載
供稿:網友

簡介

Zuul是Netflix基于JVM的路由器和服務器端負載均衡器。最常用的場景是替換Nginx反向代理后臺微服務供前端UI訪問。

Zuul使用Ribbon來定位一個通過發現轉發的實例,所有請求都以hystrix命令執行,所以故障將顯示在Hystrix指標中。

注:Zuul不包括發現客戶端,因此對于基于服務ID的路由,需要在類路徑中提供其中一個路由

Zuul是Spring Cloud提供的api網關和過濾組件,它提供如下功能:

  • 認證
  • 過濾
  • 壓力測試
  • Canary測試
  • 動態路由
  • 服務遷移
  • 負載均衡
  • 安全
  • 靜態請求處理
  • 動態流量管理

在本教程中,我們將用zuul,把web端的請求/product轉發到對應的產品服務上,并且定義一個pre過濾器來驗證是否經過了zuul的轉發。

基礎環境

  • JDK 1.8
  • Maven 3.3.9
  • IntelliJ 2018.1
  • Git

項目源碼

點擊這里

創建Zuul服務

在IntelliJ中創建一個maven項目:

  • cn.zxuqian
  • apiGateway

然后在pom.xml中添加如下代碼:

<?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> <groupId>cn.zxuqian</groupId> <artifactId>apiGateway</artifactId> <version>1.0-SNAPSHOT</version> <parent>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-parent</artifactId>  <version>2.0.1.RELEASE</version> </parent> <dependencies>  <dependency>   <groupId>org.springframework.cloud</groupId>   <!-- name has changed, before: spring-cloud-starter-zuul -->   <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.cloud</groupId>   <artifactId>spring-cloud-starter-config</artifactId>  </dependency>  <dependency>   <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-starter-actuator</artifactId>  </dependency>  <dependency>   <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-starter-web</artifactId>  </dependency> </dependencies> <dependencyManagement>  <dependencies>   <dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-dependencies</artifactId>    <version>Finchley.M9</version>    <type>pom</type>    <scope>import</scope>   </dependency>  </dependencies> </dependencyManagement> <properties>  <java.version>1.8</java.version> </properties> <build>  <plugins>   <plugin>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-maven-plugin</artifactId>   </plugin>  </plugins> </build> <repositories>  <repository>   <id>spring-milestones</id>   <name>Spring Milestones</name>   <url>https://repo.spring.io/libs-milestone</url>   <snapshots>    <enabled>false</enabled>   </snapshots>  </repository> </repositories></project>

需要注意的是,Spring官網的教程給的zuul的artifactId為spring-cloud-starter-zuul,這個是舊版zuul的名字,在我們的Finchley.M9版本中已經更名為spring-cloud-starter-netflix-zuul。

添加src/main/resources/bootstrap.yml文件,指定spring.application.name:

spring: application: name: zuul-server

創建cn.zxuqian.Application類:

package cn.zxuqian;import cn.zxuqian.filters.PreFilter;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;import org.springframework.cloud.netflix.zuul.EnableZuulProxy;import org.springframework.context.annotation.Bean;@EnableZuulProxy@EnableDiscoveryClient@SpringBootApplicationpublic class Application { public static void main(String[] args) {  SpringApplication.run(Application.class, args); } @Bean public PreFilter preFilter() {  return new PreFilter(); }}

這里使用了@EnableZuulProxy來指定使用zuul的反向代理,把我們的請求轉發到對應的服務器上。然后啟用了eureka的服務發現。Zuul默認也會使用Ribbon做負載均衡,所以可以通過eureka發現已注冊的服務。PreFilter是一個預過濾器,用來在request請求被處理之前進行一些操作,它的代碼如下:

package cn.zxuqian.filters;import com.netflix.zuul.ZuulFilter;import com.netflix.zuul.context.RequestContext;import com.netflix.zuul.exception.ZuulException;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import javax.servlet.http.HttpServletRequest;public class PreFilter extends ZuulFilter { private static Logger log = LoggerFactory.getLogger(PreFilter.class); @Override public String filterType() {  return "pre"; } @Override public int filterOrder() {  return 1; } @Override public boolean shouldFilter() {  return true; } @Override public Object run() throws ZuulException {  RequestContext ctx = RequestContext.getCurrentContext();  HttpServletRequest request = ctx.getRequest();  log.info(String.format("%s 方式請求 %s", request.getMethod(), request.getRequestURL().toString()));  return null; }}

filterType - Zuul內置的filter類型有四種,pre, route,post,error,分別代表請求處理前,處理時,處理后和出錯后。
filterOrder - 指定了該過濾器執行的順序。

shouldFilter - 是否開啟此過濾器。

run - 過濾器的業務邏輯。這里只是簡單的log了一下reqeust的請求方式和請求的路徑。

接下來,在我們的配置中心的git倉庫中創建zuul-server.yml文件,并添加如下配置:

server: port: 8083zuul: routes: products:  path: /product/**  serviceId: product-service

這里配置了zuul的端口為8083,然后映射所有/product/的請求到我們的product-service服務上。如果不配置serviceId,那么products這個Key就會默認作為ServiceId,而我們的例子中,ServiceId包括了-,所以在下邊顯示指定了ServiceId。配置完成后提交到git。

更新productService

productService的uri做了一點改動,使其更符合rest風格:

@RequestMapping("/list")public String productList() { log.info("Access to /products endpoint"); return "外套,夾克,毛衣,T恤";}

這里@RequestMapping匹配的路徑改為了/list,之前是/products。

更新web客戶端

在我們的web客戶端的ProductService中添加一個新的方法:

public String productListZuul() { return this.restTemplate.getForObject("http://zuul-server/product/list", String.class);}

這次我們直接請求zuul-server服務,然后由它把我們的請求反射代理到product-service服務。最后在ProductController中添加一個請求處理方法:

@RequestMapping("/product/list")public String productListZuul() { return productService.productListZuul();}

用來處理/product/list請求,然后調用ProductService類中的方法。

測試

使用mvn spring-boot:run啟動configServer,registry, zuulServer, productService,web這幾個工程,然后啟動第二個productService,使用SERVER_PORT=8082 spring-boot:run。

訪問幾次http://localhost:8080/product/list,然后除了會在瀏覽器看到返回的結果,我們還會在zuulServer的命令行窗口中看到如下字樣:

GET 方式請求 http://xuqians-imac:8083/product/list

然后在兩個productService的命令行窗口中,我們還會看到隨機出現的

Access to /products endpoint

說明zuulServer也會自動進行負載均衡。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲第一黄色网| 亚洲精品福利在线| 国产97人人超碰caoprom| 成人免费视频xnxx.com| 欧美极品少妇与黑人| 日韩中文理论片| 欧美性极品xxxx做受| 中文字幕视频在线免费欧美日韩综合在线看| 欧美性猛交99久久久久99按摩| 欧美日本在线视频中文字字幕| 在线观看国产成人av片| 欧美成人性生活| 亚洲色图综合网| 97在线观看免费高清| 国产精品夫妻激情| 久久久91精品国产| 国模私拍视频一区| 国产91av在线| 久久99精品久久久久久琪琪| 97精品国产97久久久久久免费| 精品丝袜一区二区三区| 日韩亚洲国产中文字幕| 国产精品jizz在线观看麻豆| 日韩在线不卡视频| 中文字幕一区日韩电影| 久久人人爽人人爽人人片亚洲| 日韩欧美国产一区二区| 97福利一区二区| 日韩在线观看免费高清完整版| 欧美激情小视频| 欧美精品久久久久a| 2018中文字幕一区二区三区| 久久久精品视频在线观看| 成人黄色免费在线观看| 日本国产欧美一区二区三区| 91免费视频国产| 国产精品黄色影片导航在线观看| 欧美大荫蒂xxx| 97色伦亚洲国产| 国产一区二区三区在线看| 国产日韩欧美黄色| 亚洲精品白浆高清久久久久久| 精品久久香蕉国产线看观看亚洲| 国产视频在线一区二区| 亚洲最新在线视频| 欧美夫妻性生活xx| 色婷婷成人综合| 午夜精品久久久久久久99热| 国产精品99一区| 精品一区二区三区四区| 日本亚洲欧洲色| 国产精品丝袜久久久久久高清| 影音先锋欧美精品| 懂色av一区二区三区| 日韩在线视频免费观看高清中文| 欧美最顶级丰满的aⅴ艳星| 国产日韩在线视频| 欧美国产亚洲精品久久久8v| 久久精品视频导航| 欧美做受高潮电影o| 日韩精品极品视频免费观看| 亚洲国产成人一区| 精品久久久久久久久久ntr影视| 久久国产精品首页| 国产视频久久久久| 欧美电影在线观看网站| 日本高清不卡的在线| 97精品国产97久久久久久春色| 久久精品青青大伊人av| 亚洲桃花岛网站| 欧美国产日产韩国视频| 在线亚洲男人天堂| 日韩一中文字幕| 成人国产精品久久久久久亚洲| 91国产美女视频| 米奇精品一区二区三区在线观看| 日韩美女在线看| 久久久久久久影院| 亚洲天堂久久av| 日本欧美爱爱爱| 欧美成人h版在线观看| 国产一区视频在线播放| 欧美大片第1页| 亚洲人成电影网站色xx| 欧美日韩国产成人在线观看| 色999日韩欧美国产| 一区二区三区视频免费| 久热精品在线视频| 中文字幕精品久久久久| 欧美—级高清免费播放| 亚洲欧洲午夜一线一品| 亚洲午夜激情免费视频| 在线播放日韩精品| 国内精品久久久久久影视8| 一区二区三区无码高清视频| 国产一区深夜福利| 欧美日韩国产精品一区| 欧美在线视频一二三| 亚洲欧美福利视频| 51色欧美片视频在线观看| 成人性生交大片免费观看嘿嘿视频| 久久精品在线视频| 亚洲深夜福利网站| 欧美在线视频在线播放完整版免费观看| 国产在线播放91| 78m国产成人精品视频| 亚洲成人动漫在线播放| www.日韩av.com| 国产一区二区三区免费视频| 久久精品国产亚洲| 午夜欧美大片免费观看| 欧美性猛交99久久久久99按摩| 91视频九色网站| 欧美视频专区一二在线观看| 久久精品国产一区二区电影| 黑人极品videos精品欧美裸| 亚洲激情视频在线观看| 国内精品视频在线| 久久久久一本一区二区青青蜜月| 91久久久久久国产精品| 538国产精品一区二区免费视频| 欧美成人精品xxx| 91在线直播亚洲| 国产精品偷伦免费视频观看的| 日韩高清av一区二区三区| 欧美野外wwwxxx| 亚洲国产天堂网精品网站| 精品日韩视频在线观看| 亚洲欧美国产精品va在线观看| 亚洲国产小视频在线观看| 欧美另类第一页| 在线播放日韩欧美| 亚洲毛片在线观看.| 亚洲欧美另类人妖| 国产精品高潮呻吟久久av野狼| 69**夜色精品国产69乱| 国产精品自产拍在线观看中文| 精品久久久在线观看| 成人有码在线视频| 91国产高清在线| 最近免费中文字幕视频2019| 亚洲在线免费视频| 欧美成年人在线观看| 久久久久一本一区二区青青蜜月| 久久夜精品香蕉| 日本精品视频网站| 成人精品在线观看| 国产亚洲精品久久久久久牛牛| 91精品国产高清久久久久久久久| 日韩欧美精品中文字幕| 久久好看免费视频| 久久亚洲私人国产精品va| 狠狠久久五月精品中文字幕| 国产成人久久久精品一区| 欧美性猛交xxxx偷拍洗澡| 国产精品福利小视频| 欧美性猛交xxxx免费看漫画| 国产69久久精品成人看| 久久夜精品香蕉| 成人黄色影片在线| 国语自产精品视频在线看抢先版图片| 日韩视频第一页| 在线日韩中文字幕| 最近中文字幕日韩精品|