11.2 Zuul
- Zuul 是 Netflix 公司提供的网关服务,是前置服务
- Zuul 的功能:
1.权限控制,可以做认证和授权
2.监控请求
3.动态路由
4.负载均衡
5.静态资源处理(不需要转发其他服务,直接在 Zuul 处理) - Zuul 中的功能基本上基于过滤器(Filter)实现,它的过滤器有几种不同类型:
1.pre 校验
2.routing 把请求路由到微服务上去
3.post 微服务执行完成,进入
4.error 过滤器执行报错了,进入
11.2.1 Zuul 的 HelloWorld 级别应用
-
(1)在 javaboycloud 项目中新创建一个 Spring Boot 项目 zuul 作为项目的 moudle。
-
(2)添加 Spring Web、Eureka Discovery Client、Zuul 依赖
-
(3)配置 application.properties
spring.application.name=zuul
server.port=2020
eureka.client.service-url.defaultZone=http://localhost:1111/eureka
- (4)zuul 服务启动类加 注解,开启网关代理
@SpringBootApplication
@EnableZuulProxy
public class ZuulApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulApplication.class, args);
}
}
- (5)启动 eureka 服务端、provider 服务和 zuul 服务
- (6)测试正常不通过网关访问 provider 服务 hello 接口
http://localhost:1113/hello
- (7)通过网关代理访问 provider 服务 hello 接口
- (8)结论:
直接访问:http://localhost:1113/hello
网关访问:http://localhost:2020/provider/hello
默认:网关的 IP 端口/ eureka 目标服务名/目标服务接口名 - (9)路由规则也可以自己配置,比如:
spring.application.name=zuul
server.port=2020
eureka.client.service-url.defaultZone=http://localhost:1111/eureka
zuul.routes.javaboy-a.path=/javaboy-a/**
zuul.routes.javaboy-a.service-id=provider
重启 zuul服务,访问
出了原有的直接访问 provider 服务和通过默认地址中加 provider 服务名访问成功外,/ java-a / hello 也能访问成功,自定义路由规则生效
- (10)上面的更改路由规则配置代码可以更精简,
spring.application.name=zuul
server.port=2020
eureka.client.service-url.defaultZone=http://localhost:1111/eureka
zuul.routes.provider=/javaboy-a/**
好了先写这么多,话说 Zuul 使用起来真简单,原理:Zuul 和 其他服务都注册都 Eureka 上面了, Zuul 能拿到整个服务列表,Zuul 代理的地址栏中,有要访问的服务名(如 provider),也有要访问的接口(如 hello),所以就能找到目标服务接口了。