zuul网关实现问题和总结

1: zuul如何做网关。大家百度一下。有很多例子。比如这篇就很不错的介绍了用法

https://blog.csdn.net/zhouhao88410234/article/details/88927686

2:我要介绍的是,我们系统实现网关遇到的问题。

我们的系统之前是使用启动的时候,用配置文件进行加载路由的。

本次改造。我们把配置放到数据库中进行了数据库的加载。

由于之前的系统是比较稳定的。所以如果重构后,加了个切换开关,如果开关是走数据库的配置。

我们就切到重构后的代码,走数据库的。如果开关是是走配置的。我们就调用老的代码。走启动的配置路由。

继承的路由加载是这样写的。本来以为这样写就可以了。

后来发现取配置的时候,源码中把启动配置中的路由和数据库中的进行了合并。这个是进行了路由合并的地方。

扫描二维码关注公众号,回复: 12547685 查看本文章

routelocators 中除了我们自己写的路由定位器,还有程序自动给我们加载的。DiscoveryClientRouteLocator  这个类就是罪魁祸首。这个路由定位器是我们不需要的。就是他会进行路由的合并。发现这个问题后。我们就开始想办法不加载这个类。发现启动压根无法进行排除。所以我们决定重写这个类。里面啥也不干。具体上代码。

a : 启动类中

@SpringBootApplication(scanBasePackages = "com.gateway",exclude = {ZuulProxyAutoConfiguration.class})

b: 程序自动加载这个配置,然后继承ZuulProxyAutoConfiguration

@Configuration
public class MyZuulProxyAutoConfiguration extends ZuulProxyAutoConfiguration {
    @Autowired
    protected ZuulProperties zuulProperties;

    @Bean
    public DiscoveryClientRouteLocator discoveryRouteLocator() {
        return new NopDiscoveryClientRouteLocator(null, null, zuulProperties, null, null);
    }
}

c: 重写DiscoveryClientRouteLocator 路由

public class NopDiscoveryClientRouteLocator extends DiscoveryClientRouteLocator {

    public NopDiscoveryClientRouteLocator(String servletPath, DiscoveryClient discovery,
                                          ZuulProperties properties, ServiceRouteMapper serviceRouteMapper, ServiceInstance localServiceInstance) {
        super(servletPath, discovery, properties, serviceRouteMapper, localServiceInstance);
    }

    @Override
    public void addRoute(String path, String location) {
    }

    @Override
    public void addRoute(ZuulRoute route) {
    }

    @Override
    public void refresh() {
    }

    @Override
    public List<Route> getRoutes() {
        return new ArrayList<>();
    }

    @Override
    public Collection<String> getIgnoredPaths() {
        return new ArrayList<>();
    }

    @Override
    public Route getMatchingRoute(String path) {
        return null;
    }

    @Override
    public int getOrder() {
        return 0;
    }

    @Override
    public void setOrder(int order) {
    }

    @Override
    protected LinkedHashMap<String, ZuulRoute> locateRoutes() {
        return new LinkedHashMap<>();
    }

    @Override
    protected String mapRouteToService(String serviceId) {
        return null;
    }

    @Override
    protected void addConfiguredRoutes(Map<String, ZuulRoute> routes) {
    }

    @Override
    protected Map<String, ZuulRoute> getRoutesMap() {
        return new HashMap<>();
    }

    @Override
    protected Route getSimpleMatchingRoute(String path) {
        return null;
    }

    @Override
    protected ZuulRoute getZuulRoute(String adjustedPath) {
        return null;
    }

    @Override
    protected Route getRoute(ZuulRoute route, String path) {
        return null;
    }

    @Override
    protected void doRefresh() {
    }

    @Override
    protected boolean matchesIgnoredPatterns(String path) {
        return false;
    }
}

猜你喜欢

转载自blog.csdn.net/lileronglilerong/article/details/108118730