Spring Boot Cloud 的动态路由模块

刚刚上班,第一个项目是前辈写的公司内部的服务平台,我们进行二期的功能完善,一开始啥也不会,就只会增删改查,看见动态路由,什么都不懂,就只能百度,之后问老师傅,然后慢慢写,下面这个是我写完之后的动态路由的,希望能给和我一样的萌新一点启发。首先,要有三个model类,分别是route (路由类),pedicate(断言类)还有filter(过滤器类),这三个类是我要存进数据库中需要的类。...
摘要由CSDN通过智能技术生成

刚刚上班,第一个项目是前辈写的公司内部的服务平台,我们进行二期的功能完善,一开始啥也不会,就只会增删改查,看见动态路由,什么都不懂,就只能百度,之后问老师傅,然后慢慢写,下面这个是我写完之后的动态路由的,希望能给和我一样的萌新一点启发。

 

首先,要有三个model类,分别是route (路由类),pedicate(断言类)还有filter(过滤器类),这三个类是我要存进数据库中需要的类。

mport com.baomidou.mybatisplus.annotations.TableField;
import lombok.Data;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Data
public class Route  {


    //路由ID
    private String route_id;
    //路由断言
    private String predicate;
    //路由断言集合配置
    @TableField(exist = false)
    private List<Predicate> predicates = new ArrayList<>();
    //路由过滤器
    private String filter_code;
    //路由过滤器集合配置
    @TableField(exist = false)
    private List<Filter> filters = new ArrayList<>();
    //路由规则转发的目标uri
    private String uri;
    //路由执行的顺序
    public int order = 0;
    //备注
    public String remark;
    //创建时间

    public Date create_date;


}

 

import lombok.Data;

import java.util.LinkedHashMap;
import java.util.Map;
@Data
public class Predicate {
    /**
     * 断言名称
     */
    private String name;
    /**
     * 断言规则
     */
    private Map<String,String> args = new LinkedHashMap<>();

}
import lombok.Data;

import java.util.LinkedHashMap;
import java.util.Map;

@Data
public class Filter {


    /**
     * 过滤器名称
     */
    private String name;

    /**
     * 过滤规则
     */
    private Map<String,String> args = new LinkedHashMap<>();
}

之后,因为使用了mybatis plus 所以我有一个 DAO,也就是RouteDao,里面只有一个findlist方法,这里就不写出来了。

题外话,要是你要分页的话,一定要写一下mp的分页配置,这个坑我先踩为敬~

之后就是我们的Service还有Impl,

Service这边一共有两个,分别是DynamicRouteService(动态路由)还有数据库的RouteSQLService(数据库路由),其中动态路由是实际上使用的路由服务的,也就是增删改查这些东西,数据库,大家都懂的。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.gateway.event.RefreshRoutesEvent;

import org.springframework.cloud.gateway.route.RouteDefinition;
import org.springframework.cloud.gateway.route.RouteDefinitionWriter;
import org.springframework.cloud.gateway.support.NotFoundException;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Mono;




@Service
public class DynamicRouteService implements ApplicationEventPublisherAware {

    @Autowired
    private RouteDefinitionWriter routeDefinitionWriter;

    private ApplicationEventPublisher publisher;


    //增加路由
    public String add(RouteDefinition definition) {


        routeDefinitionWriter.save(Mono.just(definition)).subscribe();
        notifyChanged();


        return "success";

    }

    //更新路由
    public String update(RouteDefinition definition) {
        try {

            delete(definition.getId()).subscribe();
        } catch (Exception e) {
            return "update fail,not find route  routeId: " + definition.getId();
        }
        try {
            routeDefinitionWriter.save(Mono.just(definition)).subscribe();
            notifyChanged();
            return "
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值