springcloud(feign、gateway、config、Bus)

fegin

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

要调用的接口

在这里插入图片描述

feign调用客户端

在这里插入图片描述

feign调用

在这里插入图片描述

负载均衡

在这里插入图片描述

熔断

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

请求压缩

在这里插入图片描述

日志
  • 先开启系统级别日志
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

gateway

在这里插入图片描述
Spring Cloud Gateway 是Spring Cloud团队的一个全新项目,基于Spring 5.0、SpringBoot2.0、Project Reactor 等技术开发的网关。 旨在为微服务架构提供一种简单有效统一的API路由管理方式。

Spring Cloud Gateway 作为SpringCloud生态系统中的网关,目标是替代Netflix Zuul。Gateway不仅提供统一路由方式,并且基于Filter链的方式提供网关的基本功能。例如:安全,监控/指标,和限流。

本身也是一个微服务,需要注册到Eureka client

网关的核心功能路由 过滤

核心概念通过画图解释

  • 路由(route) localhost:18085 转发到哪里
  • 断言Predicate函数路由转发规则/user localhost:18081 /order localhost:18085
  • 过滤器(Filter)

在这里插入图片描述
在这里插入图片描述
通过网关配置一个路由功能,用户访问网关的时候,如果用户请求的路径是以/user开始,则路由到user-provider服务去

在这里插入图片描述

  • 静态路由
spring:
  application:
    # 应用名
    name: api-gateway
  cloud:
    gateway:
      routes:
        #id唯一标识,可自定义
        - id: user-service-route
          #路由的服务地址
          uri: http://localhost:18081
          # 路由拦截的地址配置(断言)
          predicates:
            - Path=/user/**
  • 动态路由
    在这里插入图片描述
过滤器

过滤器作为Gateway的重要功能。常用于请求鉴权、服务调用时长统计、修改请求或响应header、限流、去除路径等等.

过滤器的分类
默认过滤器:出厂自带,实现好了拿来就用,不需要自己实现
  全局默认过滤器
  局部默认过滤器
自定义过滤器:根据需求自己实现,实现后需配置,然后才能用哦。
  全局过滤器:作用在所有路由上。
  局部过滤器:配置在具体路由下,只作用在当前路由上。

默认过滤器几十个,常见如下:

过滤器名称说明
AddRequestHeader对匹配上的请求加上Header
AddRequestParameters对匹配上的请求路由增加参数
AddResponseHeader对从网关返回的响应添加Header
StripPrefix对匹配上的请求路径去除前缀

详细说明官方链接

在这里插入图片描述
修改配置文件

spring:
  cloud:
    gateway:
     # 配置全局默认过滤器
      default-filters:
      # 往响应过滤器中加入信息
        - StripPrefix=2

局部过滤器:通过局部默认过滤器,修改请求路径。局部过滤器在这里介绍两种:添加路径前缀、去除路径前缀。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

自定义过滤器

自定义过滤器也有两个:全局自定义过滤器,和局部自定义过滤器

模拟登陆校验

基本逻辑:如果请求中有Token参数,则认为请求有效放行,如果没有则拦截提示授权无效

校验步骤:

1.用户请求发送到gateway

2.自定义全局过滤器拦截请求,验证请求的url里面有没有token参数

3.有token正常返回数据/没有token返回410错误

全局过滤器自定义:
1.在gateway-service工程编写全局过滤器类GlobalFilter,Ordered
2.编写业务逻辑代码
3.访问接口测试,加token和不加token。

实现过程:

gateway-service中创建com.itheima.filter.LoginGlobalFilter全局过滤器类,代码如下:

@Component
public class LoginGlobalFilter implements GlobalFilter, Ordered {

    /***
     * 过滤拦截
     * @param exchange
     * @param chain
     * @return
     */
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        //获取请求参数
        String token = exchange.getRequest().getQueryParams().getFirst("token");

        //如果token为空,则表示没有登录
        if(StringUtils.isEmpty(token)){
            //没登录,状态设置403
            exchange.getResponse().setStatusCode(HttpStatus.PAYLOAD_TOO_LARGE);
            //结束请求
            return exchange.getResponse().setComplete();
        }
        //放行
        return chain.filter(exchange);
    }

    /***
     * 定义过滤器执行顺序
     * 返回值越小,越靠前执行
     * @return
     */
    @Override
    public int getOrder() {
        return 0;
    }
}
局部过滤器定义

自定义局部过滤器,该过滤器在控制台输出配置文件中指定名称的请求参数及参数的值

实现步骤:

1. 在gateway-service中编写MyParamGatewayFilterFactory类(命名后缀必须是GatewayFilterFactory=)
2. 实现业务代码:循环请求参数中是否包含name,如果包含则输出参数值
3. 修改配置文件
4. 访问请求测试,带name参数

实现过程:

在gateway_service中编写MyParamGatewayFilterFactory类(标黄的名称不能变)

@Component
public class MyParamGatewayFilterFactory extends AbstractGatewayFilterFactory<MyParamGatewayFilterFactory.Config> {
    /**
     * 定义需要处理的参数
     */
    public static final String PARAM_NAME = "name";

    /****
     * 处理过程
     * @param config
     * @return
     */
    @Override
    public GatewayFilter apply(MyParamGatewayFilterFactory.Config config) {
        return new GatewayFilter() {
            @Override
            public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
                String name = exchange.getRequest().getQueryParams().getFirst("name");
                if(!StringUtils.isEmpty(name)){
                    System.out.println("名字参数:"+name);
                }
                String username = exchange.getRequest().getQueryParams().getFirst("username");
                if(!StringUtils.isEmpty(username)){
                    System.out.println("名字参数:"+username);
                }
                return chain.filter(exchange);
            }
        };
    }

    /***
     * 构造函数
     */
    public MyParamGatewayFilterFactory() {
        super(MyParamGatewayFilterFactory.Config.class);
    }

    /***
     * 处理字段的排序
     * @return
     */
    @Override
    public List<String> shortcutFieldOrder() {
        return Arrays.asList(PARAM_NAME);
    }

    /****
     * 定义一个内部类
     * 需要处理的参数
     * name:和处理的参数名字保持一致
     */
    public static class Config {
        private String name;

        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }
}

修改application.yml配置文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hZgBAaav-1661018077809)(images\1563316539267.png)]

测试访问,检查后台是否输出name和itcast;访问<http://localhost:18084/api/user/find/2?name=itheima&token=aaa>会输出。

在这里插入图片描述

config配置中心

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
文件命名有规则:

配置文件的命名方式:{application}-{profile}.yml或{application}-{profile}.properties
application为应用名称
profile用于区分开发环境dev,测试环境test,生产环境pro等
  开发环境 user-dev.yml
  测试环境 user-test.yml
  生产环境 user-pro.yml

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值