前言:
网关为微服务提供了统一的入口,同时,将外部请求和服务隔离起来,保障后台服务的安全性,进行权限校验,拒绝不合法请求,将前端的请求动态的路由到服务集群。
一、网关的作用
1、 权限控制和安全性--为每个请求提供身份认证,并拒绝不满足条件的请求。
2、预警和监控--跟踪前端有意义的请求和统计数据,以便我们准确了解生产环境运行状况。
3、动态路由--根据需求将请求动态地路由到不同的后端集群。
4、 压力测试--逐渐增大到集群的流量,以便进行性能评估。
5、负载均衡--为每种类型的请求分配容量并丢弃超过限额的请求。
6、静态资源处理--直接在Zuul处理静态资源并响应,而并非转发这些请求到内部集群中。
7、多区域弹性--实现跨AWS区域请求路由,扩大了ELB的使用范围,并使前端服务更接近我们的成员。
二、配置路由
1、新建项目,并添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
2、添加配置文件,将zuul注册到服务中心,zuul会自动寻找服务中的可用服务
server:
port: 9527
spring:
application:
#网关服务名称
name: mircoservice-zuul-getway
#将客户端注册到服务中心
eureka:
client:
service-url:
defaultZone: http://eureka01.com:7001/eureka/,http://eureka02.com:7002/eureka/,http://eureka03.com:7003/eureka/
instance:
instance-id: getway-9527.com
prefer-ip-address: true
zuul:
#忽略的微服务,即请求这些微服务不通过网关
# ignored-services:
# - "*"
# - mircoservice-dept
routes:
#代理的微服务ID
mydept.serviceId: mircoservice-dept
#自定义路径
mydept.path: /mydept/**
3、在启动类上添加注解@EnableZuulProxy
4、分别启动注册中心和网关,这时候请求路径变成
此外还可以配置统一的域名,配置负载均衡。
三、其他配置
zuul还提供了一系列过滤功能
@Component
public class MyFilter extends ZuulFilter {
public boolean shouldFilter() {
// 默认为false,表示不开启过滤器,需要改为true
return false;
}
public Object run() {
// 过滤器逻辑
return null;
}
@Override
public String filterType() {
//过滤器类别
// Zuul提供4个级别的过滤器:
// pre:可以在请求被路由之前调用
// route:在路由请求时候被调用
// post:在route和error过滤器之后被调用
// error:处理请求时发生错误时被调用
return "pre";
}
@Override
public int filterOrder() {
// 执行顺序为1,值越小越先执行
return 1;
}
}