目录
2)新建AccessFilter类,继承ZuulFilter
3)Zuul的自动配置类,可以从spring容器自动发现过滤器实例,完成自动配置
2)配置 zuul 开启重试,并配置 ribbon 重试参数
1)创建降级类,实现 FallbackProvider 接口 添加@Component
1)在 06 项目中,Hystrix利用 actuator 来暴露自己的监控日志数据
1)新建spring模块:sp07-hystrix-dashboard
4)启动类注解:@EnableHystrixDashboard
5)访问 :http://localhost:4001/hystrix
一、zuul API 网关
zuul API 网关,为微服务应用提供统一的对外访问接口。
zuul 还提供过滤器,对所有微服务提供统一的请求校验
Zuul
-
统一的调用入口
-
统一的权限校验
-
集成 Ribbon
-
集成 Hystrix
1、统一的调用入口
1)新建 spring 模块 : sp06-zuul
2)添加依赖:(包括01-commons ,共三个)
3)配置application.yml:
spring:
application:
name: zuul
# 2001 3001 4001 5001 6001
server:
port: 3001
eureka:
client:
service-url:
defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka
zuul:
routes:
item-service: /item-service/**
user-service: /user-service/**
order-service: /order-service/**
4)添加启动类注解: @EnableZuulProxy
2、统一权限校验
1)通过Zuul的过滤器,判断用户权限
- 有权限,继续转发调用
- 没有权限,从网关直接返回结果
http://localhost:3001/item-service/u56y5g4 没登录,不允许访问
http://localhost:3001/item-service/u56y5g4?token=u6y54t 已登录,可以访问
2)新建AccessFilter类,继承ZuulFilter
添加@Component
@Component
public class AccessFilter extends ZuulFilter {
// pre, routing, post, error
@Override
public String filterType() {
//return "pre";
return FilterConstants.PRE_TYPE;
}
// 过滤器的顺序号
@Override
public int filterOrder() {
// 有5个默认的过滤器,自己的过滤器加到末尾
// 再第5个过滤器中, 向Context对象放入了 serviceId, 后面组件中, 才能访问这个数据
return 6;
}
// 针对当前请求,判断是否要执行过滤代码
// 如果调用 item-service,检查是否登录
// 否则,不检查登录,直接访问
@Override
public boolean shouldFilter() {
// 先获取当前请求的上下文对象
RequestContext ctx = RequestContext.getCurrentContext();
// 当前请求,调用的服务id
String serviceId = (String)
ctx.get(FilterConstants.SERVICE_ID_KEY);// "serviceId"
// 调用的是否是 item-service
return "item-service".equals(serviceId);
}
// 过滤代码
@Override
public Object run() throws ZuulException {
// 获得上下文对象
RequestContext ctx = RequestContext.getCurrentContext();
// 获得 request 对象
HttpServletRequest request = ctx.getRequest();
// http://localhost:3001/item-service/u56y5g4?token=u6y54t
// 接收 token 参数
String token = requ