一、什么是Zuul
zuul 是netflix开源的一个API Gateway 服务器, 本质上是一个web servlet应用。
Zuul 在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。
zuul的例子可以参考netflix在github上的 simple webapp,可以按照netflix 在github wiki 上文档说明来进行使用。
![b30a0176afdccde551449ddfc43a6066.png](https://i-blog.csdnimg.cn/blog_migrate/1c29b89fb2d7bfe42212afc1ae3cb162.jpeg)
二、解决了什么问题
![5cd892fd1194944c2d1084339df95126.png](https://i-blog.csdnimg.cn/blog_migrate/01db4ad82be629a1d433d7bed04db8a6.jpeg)
三、入门案例
1.创建项目
创建一个SpringBoot项目
![dabdffef13bf199ec5c87b47c77f59b3.png](https://i-blog.csdnimg.cn/blog_migrate/d8035d15c505eb2971e13919544c950c.jpeg)
2.修改pom文件
注意添加zuul的依赖
org.springframework.cloudspring-cloud-dependenciesDalston.SR5pomimportorg.springframework.bootspring-boot-starter-weborg.springframework.cloudspring-cloud-starter-eurekaorg.springframework.cloudspring-cloud-starter-zuulorg.springframework.bootspring-boot-maven-plugin
3.修改配置
application.properties中添加服务名称,端口和Eureka注册中心的信息即可
spring.application.name=zuul-gatewayserver.port=9020eureka.client.serviceUrl.defaultZone=http://dpb:123456@eureka1:8761/eureka/,http://dpb:123456@eureka2:8761/eureka/
4.启动类
启动类中注意要添加zuul的注解
@SpringBootApplication@EnableZuulProxypublic class StartZuul {public static void main(String[] args) {SpringApplication.run(StartZuul.class, args);}}
5.测试
我们随便启动一个前面的服务。
![bcf7e0ff5afb74324da4033a32e3f0e2.png](https://i-blog.csdnimg.cn/blog_migrate/c34e41405d4d34fdc5d30b81f21ab4e2.jpeg)
我这启动的是上个案例中的一个product服务,如果需要源码欢迎访问我的GitHub:https://github.com/q279583842q/SpringCloud-dpb-Demo
直接访问:http://localhost:9001/product/findAll
![f9f931dcaf8ddebea6c6a02166eff336.png](https://i-blog.csdnimg.cn/blog_migrate/418dcd5290452e0ac3b5a4ee47502e1f.jpeg)
通过zuul服务网关访问:http://localhost:9020/e-book-product/product/findAll
![cbbc449b833eed6f1ab7f530fea525b9.png](https://i-blog.csdnimg.cn/blog_migrate/f900068b28e90630334bc6229c985a53.jpeg)
http://网关服务地址:网关服务端口/访问的服务的名称/访问的服务中的接口的地址
四、路由规则
为了便于演示,路由案例新建一个项目来演示,内容和上面的项目是一致的。
![8591ed3e4af4f5b0fca474d8c503b8b2.png](https://i-blog.csdnimg.cn/blog_migrate/3cd2d0654ce91c47042ec0d694b95f8f.jpeg)
1.URL 指定路由
application.properties中的配置如下:spring.application.name=zuul-gatewayserver.port=9030eureka.client.serviceUrl.defaultZone=http://dpb:123456@eureka1:8761/eureka/,http://dpb:123456@eureka2:8761/eureka/zuul.routes.e-book-product-provider.path=/bobo/**zuul.routes.e-book-product-provider.url=http://127.0.0.1:9001/
说明:zuul.routes.e-book-product-provider.pathzuul.routes是固定的,e-book-product-provider自定义,path是固定的/bobo/** 表示 请求的url地址zuul.routes.e-book-product-provider.url=http://127.0.0.1:9001/表示,当用户的请求是 http://xxx/bobo/** 路由到http://127.0.0.1:9001/服务处理
![bcea19e94e903105e96a7e292ea013c1.png](https://i-blog.csdnimg.cn/blog_migrate/36086b350e77e6f63fa5a7a8b57d923c.jpeg)
![f98b7ba85b0acb32c1148269ba2f56e8.png](https://i-blog.csdnimg.cn/blog_migrate/ea01efa18f1e907a735010c565fa8c08.jpeg)
2.服务名称指定路由
方式一
zuul.routes.e-book-product-provider.path=/bobo/**zuul.routes.e-book-product-provider.serviceId=e-book-product-provider
说明当用户请求的url是:http://xxxx/bobo/product/findAll 这种方式的时候,会调用zuul.routes.e-book-product-provider.serviceId=e-book-product-provider的e-book-product-provider服务来处理请求
方式二
zuul.routes.e-book-product-provider.path=/bobo/**
说明:zuul.routes.e-book-product-provider.path=/bobo/**此时routes和path之间的必须是路由的服务名称
![1137364ee3e1e0a7f95360e42b12533f.png](https://i-blog.csdnimg.cn/blog_migrate/96982cbdbe3d1100ba726525b214d5b7.jpeg)
3.路由的排除方式
排除路由,也就是该路由器会忽悠某几个服务,即使客户端发送了请求也访问不了
zuul.ignored-services=e-book-product
如果有多个服务要排除,服务名称通过