其他分享
首页 > 其他分享> > gateway随笔

gateway随笔

作者:互联网

1.gateway和zuul对比

zuul主要概念        

(1) PRE FILTERS:前置过滤器在请求被路由之前调用。可用于鉴权,限流等。   

(2) ROUTING FILTERS:路由过滤器。这种过滤器将请求路由到微服务。   

(3) POST FILTERS:后置过滤器,在路由到微服务以后执行。可用于统计,监控等。      

(4) ERROR FILTERS :错误过滤器,请示出现异常会被调用处理

 

 

 

 

gateway主要概念

(1)ROUTE:路由,网关的基本组件,由ID,URI,PREDICATE,FILTER组成

(2)PREDICATE:匹配来自 HTTP 的请求,如果判断结果为true,该请求就会被router转发

(2)Filter :过滤器,处理过滤业务逻辑

 

 

 

2.gateway路由匹配规则

(1)通过时间匹配(datetime)

(2)通过Cookie匹配(Cookie)

(3)通过 Header 属性匹配(Header)

(4)通过Host匹配(Host)

(5)通过请求方式匹配(Method)

(6)通过请求路径匹配(Path)

 

 

3.路由定位器 RouteLocator

 

 

 

 

 

 

 1.RouteDefinitionLocator,顶层路由定义定位器的接口,只有一个方法,用来获取路由定义列表。

Flux<RouteDefinition> getRouteDefinitions();

 2.InMemoryRouteDefinitionRepository继承RouteDefinitionRepository,RouteDefinitionRepository 继承自RouteDefinitionLocator,里面实现save,delete方法,用于对路由保存,删除的操作

InMemoryRouteDefinitionRepository类逻辑代码:

public class InMemoryRouteDefinitionRepository implements RouteDefinitionRepository {

private final Map<String, RouteDefinition> routes = synchronizedMap(
new LinkedHashMap<String, RouteDefinition>());

@Override
public Mono<Void> save(Mono<RouteDefinition> route) {
return route.flatMap(r -> {
if (StringUtils.isEmpty(r.getId())) {
return Mono.error(new IllegalArgumentException("id may not be empty"));
}
routes.put(r.getId(), r);
return Mono.empty();
});
}

@Override
public Mono<Void> delete(Mono<String> routeId) {
return routeId.flatMap(id -> {
if (routes.containsKey(id)) {
routes.remove(id);
return Mono.empty();
}
return Mono.defer(() -> Mono.error(
new NotFoundException("RouteDefinition not found: " + routeId)));
});
}

@Override
public Flux<RouteDefinition> getRouteDefinitions() {
return Flux.fromIterable(routes.values());
}

}

3.Locator 种类

(1)PropertiesRouteDefinitionLocator 基于配置属性的路由定义定位器

(2)DiscoveryClientRouteDefinitionLocator 基于服务发现的路由定义定位器

(3)CachingRouteDefinitionLocator 基于缓存的路由定义定位器

(4)CompositeRouteDefinitionLocator 组合路由定义定位器

其中 CompositeRouteDefinitionLocator  组合方式路由定义定位器使用组合模式进行实现,组合多个 RouteDefinitionLocator 的实现,为获取路由定义信息 getRouteDefinitions 提供统一入口

(ps:在集成nacos中调试发现, CompositeRouteDefinitionLocator 会轮询 上述其他三个定位器进行请求转发,只要其中某个存在路由规则,请求路由就会生效,里面的更多逻辑待调试中。。。。 )

 

标签:定位器,return,Mono,过滤器,匹配,随笔,gateway,路由
来源: https://www.cnblogs.com/jessica888/p/14672949.html