• Apache ShenYu ModifyResponse插件使用


    1 介绍

    1.1 概念

    Apache ShenYu它是Java原生API网关,用于服务代理、协议转换和API治理。

    1.2 特性

    服务代理: Support for Apache® Dubbo™, Spring Cloud, gRPC, Motan, SOFA, TARS, WebSocket, MQTT
    安全: Sign, OAuth 2.0, JSON Web Tokens, WAF plugin
    API治理: Request, response, parameter mapping, Hystrix, RateLimiter plugin
    可观测性: Tracing, metrics, logging plugin
    控制面板: Dynamic traffic control, visual backend for user menu permissions
    拓展: Plugin hot-swapping, dynamic loading
    集群: NGINX, Docker, Kubernetes
    语言: provides .NET, Python, Go, Java client for API register

    1.3 架构图

    在这里插入图片描述

    2 运行

    2.1 运行先决条件

    在部署shenyu-admin项目前,需初始化其所使用的数据库(数据库目前支持:MySQL、PostgreSql、Oracle),其中所用到的脚本文件都存放在项目根目录下的db目录。我们这里使用的数据库是PostgreSql。
    在项目pg初始化脚本目录中找到初始化脚本create-database.sql、create-table.sql,并使用客户端连接工具连接你的PostgreSql服务依次执行,由此你会得到一个名为shenyu的数据库,它之后可作为shenyu-admin项目的数据库使用。
    在这里插入图片描述
    在这里插入图片描述

    2.1 本地运行

    由于我们需要研究和改造shenyu网关项目,因此我们直接从github中拉取源码在本地运行即可。拉取地址为:git clone https://github.com/apache/shenyu.git。

    启动步骤:
    (1)我们这里使用PostgreSql来存储,需要先初始化数据库和修改application-pg.yml的jdbc相关配置,在设置变量–spring.profiles.active = pg启动服务。
    在这里插入图片描述
    在这里插入图片描述
    (2)使用开发工具启动org.apache.shenyu.admin.ShenyuAdminBootstrap,访问http://localhost:9095,默认用户名和密码分别为:admin和123456。
    (3)使用开发工具启动org.apache.shenyu.bootstrap.ShenyuBootstrapApplication。
    在这里插入图片描述

    3 插件使用

    Apache ShenYu将基于责任链模式由所有启用的插件来执行它。作为Apache ShenYu的核心,插件是可扩展和可热插拔的。不同的插件做不同的事情。当然,用户也可以自定义插件来满足自己的需求。

    3.1 ModifyResponse插件

    3.1.1 插件名称

    响应修改插件。

    3.1.2 适用场景

    需要对接口的响应头部参数、响应HTTP状态码或响应体进行修改的场景。

    3.1.3 插件功能

    修改HTTP响应状态码。
    添加、设置、覆盖或者移除响应头部参数。
    添加、覆盖或者移除响应体参数。

    3.1.4 插件代码

    核心模块shenyu-plugin-modify-response。
    核心类
    org.apache.shenyu.plugin.modify.response.ModifyResponsePlugin

    3.1.5 如何使用插件

    3.1.5.1 插件使用流程图

    在这里插入图片描述

    3.1.5.2 接入SpringBoot应用改造

    为了测试ModifyResponse插件的使用,我们需要准备一个SpringBoot应用,将这个SpringBoot应用的网关交由shenyu网关来管理。
    (1)pom.xml引入集成依赖包

    <dependency>
        <groupId>org.apache.shenyugroupId>
        <artifactId>shenyu-spring-boot-starter-client-springmvcartifactId>
        <version>2.5.0version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    (2)application.yml配置注册到shenyu网关注册配置信息

    shenyu:
      register:
        registerType: http #zookeeper #etcd #nacos #consul
        serverLists: http://localhost:9095 #localhost:2181 #http://localhost:2379 #localhost:8848
        props:
          username: admin
          password: 123456
      client:
        http:
          props:
            contextPath: /springboot
            appName: springboot
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    (3)修改Controller接口映射路径
    @ShenyuSpringMvcClient(“/vehicleType”)
    @ShenyuSpringMvcClient(“/getList”)

    import org.apache.shenyu.client.springmvc.annotation.ShenyuSpringMvcClient;
    
    @RestController
    @AllArgsConstructor
    @RequestMapping("/vehicleType")
    @ShenyuSpringMvcClient("/vehicleType")
    public class VehicleTypeController {
    
        private final VehicleTypeService vehicleTypeService;
    
        /**
         * 查询车辆类型
         */
        @PostMapping("/getList")
        @ShenyuSpringMvcClient("/getList")
        public RequestResult getList() {
            return vehicleTypeService.getList();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    改造完成之后,启动项目,查看控制台打印信息,看到如下输出内容说明注册到shenyu网关成功了。
    在这里插入图片描述

    3.1.5.3 启用插件

    在shenyu-admin --> 基础配置 --> 插件管理 --> modifyResponse设置为开启。
    在这里插入图片描述

    3.1.5.4 配置插件

    Shenyu-admin插件列表 --> HttpProcess --> modifyResponse,先添加选择器,然后在添加规则。
    (1)添加选择器
    在这里插入图片描述
    (2)添加规则
    在这里插入图片描述

    3.1.5.5 接口调用

    在这里插入图片描述

  • 相关阅读:
    R语言ggplot2可视化:基于aes函数中的fill参数和shape参数自定义绘制分组折线图并添加数据点(散点)、设置可视化图像的主题为theme_gray
    【科学文献计量】RC.networkBibCoupling()中的参数解释
    现代企业管理笔记——管理理论新进展
    web.xml中Servlet中init-param的作用说明
    计算机网络 -- 多人聊天室
    深聊MySQL,从入门到入坟之:定位慢SQL的方法还可以这样,小菜鸡都能看懂。
    淘宝/天猫API:upload_img-上传图片到淘宝
    社科研究中的问卷设计详解
    前任开发在代码里下毒了,支付下单居然没加幂等
    Git学习笔记2
  • 原文地址:https://blog.csdn.net/weixin_44917045/article/details/128021684