Soul源码分析–soul-admin源码分析

本文详细分析了Soul-admin后台如何管理和实现动态配置,包括页面操作的源码解析,数据与soul-bootstrap的WebSocket、Zookeeper、HTTP同步机制。通过对源码的深入探讨,揭示了Soul网关配置的实时生效原理。
摘要由CSDN通过智能技术生成

Soul源码分析–soul-admin源码分析

前言

在上一篇文章中,介绍了 soul-admin 怎么管理和配置网关的请求,其核心原理是基于各种插件来实现对应的功能。现在我们来看看后台是怎么来管理和实现动态配置。

源码分析

  1. 页面操作源码分析
    在分析源码之前,先看下图,页面显示加载的插件列表会对应后端的请求,根据后端请求,找到对应的controller类
    在这里插入图片描述
    然后找到对应的方法,在上图可以看到这里是访问 plugin 中默认为空的 mapping,传入到分页相关的参数,然后去查询数据库中对应的插件记录
    在这里插入图片描述
    数据库中对应的表为下图所示,divide 状态是启用,在上一篇中,就是用这个插件来测试网关
    在这里插入图片描述
    同时请求的还有选择器,请求的 controller 见下图。在上篇的演示中,我们直接在页面把选择器中的条件 CRUD,可以实时反应到网关中去,而不需要重启网关,所以这里除了query方法中,增加、删除、和修改方法中,在保存到数据库之后都有一个 publishEvent 方法。就是这个事件方法,可以让用户直接在 soul 后台配置规则,从而达到时时生效的目地
    在这里插入图片描述
public int createOrUpdate(final SelectorDTO selectorDTO) {
        int selectorCount;
        SelectorDO selectorDO = SelectorDO.buildSelectorDO(selectorDTO);
        List<SelectorConditionDTO> selectorConditionDTOs = selectorDTO.getSelectorConditions();
        if (StringUtils.isEmpty(selectorDTO.getId())) {
            selectorCount = selectorMapper.insertSelective(selectorDO);
            selectorConditionDTOs.forEach(selectorConditionDTO -> {
                selectorConditionDTO.setSelectorId(selectorDO.getId());
                selectorConditionMapper.insertSelective(SelectorConditionDO.buildSelectorConditionDO(selectorConditionDTO));
            });
        } else {
            selectorCount = selectorMapper.updateSelective(selectorDO);
            //delete rule condition then add
            selectorConditionMapper.deleteByQuery(new SelectorConditionQuery(selectorDO.getId()));
            selectorConditionDT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值