Spring Cloud Gateway(十三):基于MongoDB实现动态路由

1、概述

Spring Cloud Gateway 默认的RouteDefinitionWriter实现类是org.springframework.cloud.gateway.route.InMemoryRouteDefinitionRepository,Route信息保存在当前实例的内存中,这在集群环境中会存在同步问题。本文就基于MongoD自定义一个RouteDefinitionWriter。

基本要点:

1、路由规则存储在MongoDB中(也可以是别的存储介质)

2、网关启动读取已配置好的路由规则

3、首次读取从MongoDB中加载,同时存在缓存中,以后读取直接从缓存读取

4、通过api动态添加路由规则,同时添加到缓存和MongoDB中

2、MongoRouteDefinition

import lombok.Data;
import org.springframework.cloud.gateway.filter.FilterDefinition;
import org.springframework.cloud.gateway.handler.predicate.PredicateDefinition;
import org.springframework.data.mongodb.core.mapping.Field;

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

/**
 * 存储在mongodb中的自定义路由信息
 *
 * @author lkf
 * @date 2018-11-29 10-51
 */
@Data
public class MongoRouteDefinition {

    /**
     * 路由id
     */
    @Field("route_id")
    private String routeId;
    /**
     * 路由谓词
     */
    private List<PredicateDefinition> predicates = new ArrayList<>();
    /**
     * 过滤器
     */
    private List<FilterDefinition> filters = new ArrayList<>();
    /**
     * 跳转地址uri
     */
    private String uri;
    /**
     * 路由顺序
     */
    private int order;

}

3、自定义RouteDefinitionRepository

package com.lkf.gateway.repository;

import org.springframework.cloud.gateway.route.RouteDefinition;
import org.springframework.cloud.gateway.route.RouteDefinitionRepository;
import org.springframework.cloud.gateway.support.NotFoundException;
import org.springframework.data.mongodb.core.MongoTemplate;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

import java.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值