1.动态路由 需求:根据指定内网服务的ip和端口信息提供反向代理。
原内网服务是发布到外网上,通过业务逻辑在前端进行整合。后需要将这些内网服务隐藏到主服务之后。
第一版是通过自写的netty进行实现。后改用spring cloud gateway进行实现。以方便后续维护。
实现效果:
- innerhost1.innerport1.proxy.domain.com 访问 内网服务1、innerhost2.innerport2.proxy.domain.com 访问 内网服务2;
- innerhost:内网服务地址 innerport 内网服务端口。
eg:127.0.0.1.8080.dev.localhost TO 127.0.0.1:8080
思路:参照gateway lb :RouteToRequestUrlFilter实现。
/**
* route根据predicates配置进行匹配。因此只要制定符合需求的predicates便可获得对应route及其uri。
*/
RoutePredicateHandlerMapping.lookupRoute(ServerWebExchange exchange):Mono<Route>
/**
* 在filter中 RouteToRequestUrlFilter将route.uri解析并存储到 ServerWebExchange.getAttributes():GATEWAY_REQUEST_URL_ATTR 中
因此只要proxyfilter在RouteToRequestUrlFilter之后运行即可直接使用该uri
*/
RouteToRequestUrlFilter.filter(ServerWebExchange exchange, GatewayFilterChain chain):Mono<Void>
实现:
package.component:
@Component
public class ProxyFilter implements GlobalFilter, Ordered {
@Override
public in