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