SpringCloud-Zuul服务网关[介绍及入门案例]
閱讀本文約花費: 4 (分鐘)
文章介绍了什么是Zuul,入门案例、修改pom文件,修改配置,启动类,希望对大家的学习有所帮助。 |
一、什么是Zuul
zuul 是netflix开源的一个API Gateway 服务器, 本质上是一个web servlet应用。
Zuul 在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。
zuul的例子可以参考netflix在github上的 simple webapp,可以按照netflix 在github wiki 上文档说明来进行使用。
二、解决了什么问题
三、入门案例
1.创建项目
创建一个SpringBoot项目
2.修改pom文件
注意添加zuul的依赖
<dependencyManagement> <dependencies> <dependency> <groupId>org.spring framework.cloud</groupId> <artifactId>spring-cloud- dependencies</artifactId> <version>Dalston.SR5</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework. boot</groupId> <artifactId>spring-boot- starter-web</artifactId> </dependency> <dependency> <groupId>org.spring framework.cloud</groupId> <artifactId>spring-cloud -starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework. cloud</groupId> <artifactId>spring-cloud- starter-zuul</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework. boot</groupId> <artifactId>spring-boot-maven -plugin</artifactId> </plugin> </plugins> </build> |
3.修改配置
application.properties中添加服务名称,端口和Eureka注册中心的信息即可
spring.application.name=zuul-gateway server.port=9020 #\u8BBE\u7F6E\u670D\u52A1\u6CE8\u518C\u4E2D \u5FC3\u5730\u5740\uFF0C\u6307\u5411\u53E6 \u4E00\u4E2A\u6CE8\u518C\u4E2D\u5FC3 eureka.client.serviceUrl.defaultZone= http://dpb:123456@eureka1:8761/eureka/, http://dpb:123456@eureka2:8761/eureka/ |
4.启动类
启动类中注意要添加zuul的注解
@SpringBootApplication @EnableZuulProxy public class StartZuul{ public static void main (String[] args) { SpringApplication.run (StartZuul.class, args); } } |
5.测试
我们随便启动一个前面的服务。
我这启动的是上个案例中的一个product服务
通过zuul服务网关访问:http://localhost:9020/e-book-product/product/findAll
四、路由规则
为了便于演示,路由案例新建一个项目来演示,内容和上面的项目是一致的。
1.URL 指定路由
application.properties中的配置如下:
spring.application.name=zuul-gateway server.port=9030 #\u8BBE\u7F6E\u670D\u52A1\u6CE8\u518C \u4E2D\u5FC3\u5730\u5740\uFF0C\u6307\ u5411\u53E6\u4E00\u4E2A\u6CE8\ u518C\u4E2D\u5FC3 eureka.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.path
zuul.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/服务处理
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之间的必须是路由的服务名称
3.路由的排除方式
排除路由,也就是该路由器会忽悠某几个服务,即使客户端发送了请求也访问不了
zuul.ignored-services= e-book-product |
如果有多个服务要排除,服务名称通过”,”连接
zuul.ignored-services= e-book-product,e-book-order |
由于服务太多,不可能手工一个个加,故路由排除所有服务,然后针对要 路由的服务进行手工加
# 先忽略所有的请求 zuul.ignored-services=* # 然后单独放开e-book-order的服务 zuul.routes.e-book-order.path=/bobo/** |
也可以通过排除指定关键字的路径
# 排除所有含有findAll关键字的请求 zuul.ignored-patterns=/**/findAll/** # 放开e-book-order服务, 同时也会排除 findAll的请求 zuul.routes.e-book-order.path=/bobo/** |
4.指定路由前缀
也就是给提前的url添加一个前缀
## http://127.0.0.1: 9030/bobo/product-provider /product/findAll zuul.prefix=/bobo zuul.routes.e-book-product.path =/product-provider/** |
具体方位如下:http://localhost:9030/bobo/product-provider/product/findAll