Spring cloud 微服务(三)---- Zuul API网关、负载均衡、重试、限流、熔断、监控

本文详细介绍了如何使用Spring Cloud构建Zuul API网关,包括统一调用入口、权限校验、Ribbon的负载均衡和重试、Hystrix的熔断和限流以及监控。通过Zuul的过滤器实现权限验证,集成Ribbon实现负载均衡,结合Hystrix进行服务容错,并设置断路器规则。同时,文章还展示了如何配置Hystrix Dashboard进行实时监控。
摘要由CSDN通过智能技术生成

目录

一、zuul API 网关

1、统一的调用入口

1)新建 spring 模块 : sp06-zuul

2)添加依赖:(包括01-commons ,共三个)

3)配置application.yml:

4)添加启动类注解:  @EnableZuulProxy

2、统一权限校验

1)通过Zuul的过滤器,判断用户权限

2)新建AccessFilter类,继承ZuulFilter

3)Zuul的自动配置类,可以从spring容器自动发现过滤器实例,完成自动配置

3、zuul集成 ribbon 负载均衡和重试

4、zuul启用 ribbon 重试

1)添加 spring-retry 依赖

2)配置 zuul 开启重试,并配置 ribbon 重试参数

5、zuul 集成Hystrix 容错、限流

1)创建降级类,实现 FallbackProvider 接口 添加@Component 

2)zuul会自动配置类,对降级类进行自动配置

6、Hystrix 限流-- 熔断

1)断路器的打开条件:

2)半开状态:

7、Hystrix 监控

1)在 06 项目中,Hystrix利用 actuator 来暴露自己的监控日志数据

8、搭建Hystrix Dashboard 数据监控

1)新建spring模块:sp07-hystrix-dashboard

2)添加依赖:Hystrix Dashboard

3)application.yml

4)启动类注解:@EnableHystrixDashboard

5)访问 :http://localhost:4001/hystrix


一、zuul API 网关

zuul

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值