當前位置:
首頁 >
Zuul:路由转发,排除和自定义
發布時間:2024/4/13
29
豆豆
生活随笔
收集整理的這篇文章主要介紹了
Zuul:路由转发,排除和自定义
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們來學習服務網關api-gateway在主類上加一個注解@EnableZuulProxy,我們希望訪問gateway的時候,可以路由到product的這個接口上,我們來拿這個接口作為實驗@GetMapping("/list")
public List<ProductInfo> list() {//1. 查詢所有在架的商品List<ProductInfo> productInfoList = productService.findUpAll();return productInfoList;
}localhost:7900/product/list再來啟動我們的網關,要怎么通過網關來訪問這個接口呢localhost:8040/product/product/list前面的product是服務的名字,這樣子就訪問到了,你也可以路由到其他的地址,這上面的都可以路由,比如我們挑一個CONFIG,挑CONFIG服務的某個接口,我們訪問一下localhost:8080/order-test.yml可以訪問,前面填服務的名字,localhost:8040/config/order-test.yml也是可以訪問得到的,我們也 可以試一下POST接口,我們使用POSTMAN來測試,傳過去的內容是這個商品的ID,也能夠獲取的到,這就是路由轉發的基本的功能,我們會發現,使用Zuul這個組件呢,什么都沒配置,非常輕松的就實現了路由的功能,你看我們只是引入了依賴,然后加這么一個注解,就實現了,但同時也有他的弊端,你訪問的地址必須按照他的規則來,CONFIG是應用的名字,接上他的地址,那我想自定義怎么辦呢,就拿開始的PRODUCT來說,那我想換一個地址,localhost:8040/product/product/list比如叫myProduct,這樣的話我要怎么來做呢,自定義路由,這個時候你就要使用到Zuul的配置了,zuul.routes,下面是你要定義規則的名字,比如就叫myProduct.path,這是你的URL地址zuul.routes.myProduct.path=/myProduct/**以及你要路由到哪個服務上去,服務名叫product,zuul.routes.myProduct.service-id=product再不看一下這個配置怎么配的,訪問一下新的地址,localhost:8040/myProduct/product/list那有沒有地方可以讓我看到所有路由的規則呢,其實是有的,我們來找一下,找一下他的mapper,你要訪問/application/routeslocalhost:8040/application/routes提示權限問題,這里需要加這么一個配置management.security.enabled=false寫成false,這就可以看到了http://localhost:8040/routes{"/myProduct/**":"product","/product/**":"product"}它上面所有的路由的功能,myProduct路由到product這個服務,product也同樣的路由到這個服務,所以你看到我先做寫成product也是可以的localhost:8040/product/product/list這里注意一下,zuul.routes.myProduct.path=/myProduct/**這里的myProduct我們是可以隨意來定義的,比如我寫aaaa也沒關系zuul.routes.aaaa.path=/myProduct/**而/myProduct/**這個就不能瞎寫了,這個必須是真實的訪問路徑,zuul.routes.aaaa.path=/myProduct/**
zuul.routes.aaaa.service-id=product這個的意思就是myProduct/product/list路由到product/product/list我們再來看一下配置的規則,如果你只是配置兩項的話呢,他其實還有一個簡便的寫法,你在routes下面可以直接寫service-id,后面直接跟上pathzuul.routes.product=/myProduct/**把之前的給注釋掉,也是可以訪問http://localhost:8040/myProduct/product/list既然可以控制路由到某個地址,那我能不能禁止某個地址的路由呢,說起來有點繞,我希望這個接口暴露出去,給移動端或者WEB端訪問,怎么寫呢,zuul.ignoredPatternsprivate Set<String> ignoredPatterns = new LinkedHashSet<>();配置是一個Set,你可以配置多個,怎么在yml里面配置Set呢
<?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>com.learn.cloud</groupId><artifactId>api-gateway</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><parent><groupId>cn.learn</groupId><artifactId>microcloud02</artifactId><version>0.0.1</version></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties> <dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka-server</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zuul</artifactId></dependency></dependencies><!-- 這個插件,可以將應用打包成一個可執行的jar包 --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
server.port=8040
spring.application.name=api-gateway
eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}}
eureka.client.serviceUrl.defaultZone=http://admin:1234@10.40.8.152:8761/eureka
#eureka.instance.appname=api-gateway
#zuul.routes.user-route.service-id=product
#zuul.ignoredServices=microservice-consumer-movie-ribbon-hystrix
#zuul.routes.user-route.path=/user/**
#zuul.routes.user-route.url=http://localhost:7900/
#ribbon.eureka.enabled=false
#microservice-simple-provider-user.ribbon.listOfServers=http://localhost:7900/,http://localhost:7901/#zuul.routes.myProduct.path=/myProduct/**
#zuul.routes.myProduct.service-id=product
zuul.routes.product=/myProduct/**
management.security.enabled=false
package com.learn.cloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;@EnableZuulProxy
@SpringBootApplication
public class APIGatewayApplication {public static void main(String[] args) {SpringApplication.run(APIGatewayApplication.class, args);}// @Bean
// public PatternServiceRouteMapper serviceRouteMapper() {
// return new PatternServiceRouteMapper(
// "(?<name>^.+)-(?<version>v.+$)",
// "${version}/${name}");
// }
}
?
總結
以上是生活随笔為你收集整理的Zuul:路由转发,排除和自定义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 服务网关和Zuul
- 下一篇: Zuul:Cookie和动态路由