Zuul:路由转发,排除和自定义
生活随笔
收集整理的這篇文章主要介紹了
Zuul:路由转发,排除和自定义
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
我們來學(xué)習(xí)服務(wù)網(wǎng)關(guān)api-gateway在主類上加一個(gè)注解@EnableZuulProxy,我們希望訪問gateway的時(shí)候,可以路由到product的這個(gè)接口上,我們來拿這個(gè)接口作為實(shí)驗(yàn)@GetMapping("/list")
public List<ProductInfo> list() {//1. 查詢所有在架的商品List<ProductInfo> productInfoList = productService.findUpAll();return productInfoList;
}localhost:7900/product/list再來啟動(dòng)我們的網(wǎng)關(guān),要怎么通過網(wǎng)關(guān)來訪問這個(gè)接口呢localhost:8040/product/product/list前面的product是服務(wù)的名字,這樣子就訪問到了,你也可以路由到其他的地址,這上面的都可以路由,比如我們挑一個(gè)CONFIG,挑CONFIG服務(wù)的某個(gè)接口,我們?cè)L問一下localhost:8080/order-test.yml可以訪問,前面填服務(wù)的名字,localhost:8040/config/order-test.yml也是可以訪問得到的,我們也 可以試一下POST接口,我們使用POSTMAN來測(cè)試,傳過去的內(nèi)容是這個(gè)商品的ID,也能夠獲取的到,這就是路由轉(zhuǎn)發(fā)的基本的功能,我們會(huì)發(fā)現(xiàn),使用Zuul這個(gè)組件呢,什么都沒配置,非常輕松的就實(shí)現(xiàn)了路由的功能,你看我們只是引入了依賴,然后加這么一個(gè)注解,就實(shí)現(xiàn)了,但同時(shí)也有他的弊端,你訪問的地址必須按照他的規(guī)則來,CONFIG是應(yīng)用的名字,接上他的地址,那我想自定義怎么辦呢,就拿開始的PRODUCT來說,那我想換一個(gè)地址,localhost:8040/product/product/list比如叫myProduct,這樣的話我要怎么來做呢,自定義路由,這個(gè)時(shí)候你就要使用到Zuul的配置了,zuul.routes,下面是你要定義規(guī)則的名字,比如就叫myProduct.path,這是你的URL地址zuul.routes.myProduct.path=/myProduct/**以及你要路由到哪個(gè)服務(wù)上去,服務(wù)名叫product,zuul.routes.myProduct.service-id=product再不看一下這個(gè)配置怎么配的,訪問一下新的地址,localhost:8040/myProduct/product/list那有沒有地方可以讓我看到所有路由的規(guī)則呢,其實(shí)是有的,我們來找一下,找一下他的mapper,你要訪問/application/routeslocalhost:8040/application/routes提示權(quán)限問題,這里需要加這么一個(gè)配置management.security.enabled=false寫成false,這就可以看到了http://localhost:8040/routes{"/myProduct/**":"product","/product/**":"product"}它上面所有的路由的功能,myProduct路由到product這個(gè)服務(wù),product也同樣的路由到這個(gè)服務(wù),所以你看到我先做寫成product也是可以的localhost:8040/product/product/list這里注意一下,zuul.routes.myProduct.path=/myProduct/**這里的myProduct我們是可以隨意來定義的,比如我寫aaaa也沒關(guān)系z(mì)uul.routes.aaaa.path=/myProduct/**而/myProduct/**這個(gè)就不能瞎寫了,這個(gè)必須是真實(shí)的訪問路徑,zuul.routes.aaaa.path=/myProduct/**
zuul.routes.aaaa.service-id=product這個(gè)的意思就是myProduct/product/list路由到product/product/list我們?cè)賮砜匆幌屡渲玫囊?guī)則,如果你只是配置兩項(xiàng)的話呢,他其實(shí)還有一個(gè)簡便的寫法,你在routes下面可以直接寫service-id,后面直接跟上pathzuul.routes.product=/myProduct/**把之前的給注釋掉,也是可以訪問http://localhost:8040/myProduct/product/list既然可以控制路由到某個(gè)地址,那我能不能禁止某個(gè)地址的路由呢,說起來有點(diǎn)繞,我希望這個(gè)接口暴露出去,給移動(dòng)端或者WEB端訪問,怎么寫呢,zuul.ignoredPatternsprivate Set<String> ignoredPatterns = new LinkedHashSet<>();配置是一個(gè)Set,你可以配置多個(gè),怎么在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><!-- 這個(gè)插件,可以將應(yīng)用打包成一個(gè)可執(zhí)行的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}");
// }
}
?
總結(jié)
以上是生活随笔為你收集整理的Zuul:路由转发,排除和自定义的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 服务网关和Zuul
- 下一篇: Zuul:Cookie和动态路由