专栏首页JAVA后端开发spring cloud gateway 网关的代码配置

spring cloud gateway 网关的代码配置

在写spring cloud gateway 时,网上查的资料都是把网关的路由配置写在配置文件里,但其实,可以把配置通过代码实现 示例如下:

 /**
     * spring:
     * cloud:
     * gateway:
     * routes:
     * - id: nameRoot
     * uri: http://nameservice
     * predicates:
     * - Path=/name/**
     * - Weight=service1, 95
     * filters:
     * - StripPrefix=1
     */

    private void createGatewayRoute(GatewayAppVo gatewayApp) {
        gatewayApp.getMachineList().forEach(gatewayAppMachineVo -> {
            GatewayRouteDto gatewayRouteDto = new GatewayRouteDto();
            gatewayRouteDto.setId(gatewayApp.getId() + "_" + gatewayAppMachineVo.getServerId());
            gatewayRouteDto.setPredicates(createPredicateDefinition(gatewayApp, gatewayAppMachineVo));
            gatewayRouteDto.setFilters(Collections.singletonList(createFilterDefinition()));
            gatewayRouteDto.setUri(gatewayAppMachineVo.getMachineHost());
            gatewayRouteDto.setOrder(gatewayApp.getSequence());
                redisUtils.set(STARMARK_GATEWAY_ROUTES + gatewayApp.getProjectId() + ":" + gatewayApp.getId() + "_" + gatewayAppMachineVo.getServerId(),
                        JSONObject.toJSONString(gatewayRouteDto));

        });
    }

    private List<PredicateDefinition> createPredicateDefinition(GatewayAppVo gatewayAppVo, GatewayAppMachineVo gatewayAppMachineVo) {
        List<PredicateDefinition> predicatesList = new ArrayList<>();
        //增加转发
        {
            Map<String, String> args = new HashMap<>();
            args.put("pattern", "/" + gatewayAppVo.getProjectId() + "/" + gatewayAppVo.getAccessPre());
            args.put("pathPattern", "/" + gatewayAppVo.getProjectId() + "/" + gatewayAppVo.getAccessPre());
            PredicateDefinition predicateDefinition = new PredicateDefinition();
            predicateDefinition.setArgs(args);
            predicateDefinition.setName("Path");
            predicatesList.add(predicateDefinition);
        }
        //增加权重
        if (gatewayAppMachineVo.getWeight() != null) {
            Map<String, String> args = new HashMap<>();
            args.put("weight.group", gatewayAppMachineVo.getServerId());
            args.put("weight.weight", gatewayAppMachineVo.getWeight().toString());
            PredicateDefinition predicateDefinition = new PredicateDefinition();
            predicateDefinition.setArgs(args);
            predicateDefinition.setName("Weight");
            predicatesList.add(predicateDefinition);
        }

        return predicatesList;

    }

    private FilterDefinition createFilterDefinition() {
        Map<String, String> args = new HashMap<>();
        args.put("parts", "1");
        FilterDefinition filterDefinition = new FilterDefinition();
        filterDefinition.setName("StripPrefix");
        filterDefinition.setArgs(args);
        return filterDefinition;

    }

上述代码是我做网关系统里,设置路由的代码,各位可参考!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 通用数据级别权限的框架设计与实现(3)-数据列表的权限过滤

    查看上篇文章通用数据级别权限的框架设计与实现(2)-数据权限的准备工作,我们开始数据列表的权限过滤. 原理:我们在做过滤列表时,根据用户权限自动注入到相关SQ...

    星痕
  • quartz获取定时任务下次执行的时间

    quartz很多人都会用,但需要配置cronExpression. 这个cronExpression很多技术人员都要配置,但很多情况,我们要知道这个cronE...

    星痕
  • JAVA 通用寻找对象间差异的所有字段

    最近在做某个项目中,需要查找多个属性间不同的字段,但这些属性很多,一个一个的字段比较,很折腾,所以就自己写了一个快速的框架. 1.定义需要对比的结果,有新增,...

    星痕
  • 学习纲要:代码编辑器

    Joel
  • C++ OpenCV特征提取之SIFT特征检测

    前面我们介绍了《C++ OpenCV特征提取之SURF特征检测》,这一篇我们在介绍一下SIFT的特征提取。

    Vaccae
  • Linux 新手容易犯的 7 个错误

    改变操作系统对于任何人来说都是迈出的一大步,特别是当许多用户不确定操作系统究竟如何的时候,尤其如此。

    哲洛不闹
  • 线性神经网络及学习规则

    感知器的激活函数只能输出两种可能的值,而线性神经网络的激活函数是线性函数(y=x),因此可以取任意值。线性神经网络的过程如下图所示?

    三猫
  • 腾讯Q2财报发布,一个字:稳!

    腾讯昨天公布截至二零一九年六月三十日止第二季及上半年未经审核综合业绩。上半年总收入为人民币1,742.86亿元,同比增长18%;第二季度总收入为人民币888....

    腾讯大讲堂
  • 各种语言按钮事件特征码

    比如:弹提示框,就下MessageBoxA,注册表的,就下RegOpenKeyA等等

    阿珏
  • py+selenium+IE 批量执行脚本10几分钟,IE会卡住【无解,提供绕过方法】

      一个脚本文件里有20几个用例,跑起来10多分钟,每次跑10分钟后(即第22条用例左右时)IE就会卡住,程序就会在那傻等,最后报错超时……不是用例的问题,我注...

    逆向小白

扫码关注云+社区

领取腾讯云代金券