核心概念
路由:网关中最基础的部分,路由信息包括一个id、一个目的URI、一组断言工厂、一组Filter组成。如果断言为真,则说明请求的URL和配置的路径匹配。
断言:Java8的断言函数,SpringCloud Gateway中的断言函数类型是Spring5.0框架中的ServerWebExchange。断言函数允许开发者定义匹配Http request中的任何信息,比如请求头和参数等。
过滤器:SpringCloud Gateway中filter分为Gateway Filter和Global Filter。Filter可以对请求和响应进行处理。
工作原理
服务搭建引入依赖
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discoveryorg.springframework.cloud spring-cloud-starter-gateway
配置gateway.discovery.locator.enable=true接口测试:
路由
配置gateway.discovery.locator.enable=false
自定义断言工厂MyCheckRoutePredicateFactor:
@Component @Slf4j public class MyCheckRoutePredicateFactory extends AbstractRoutePredicateFactory{ public MyCheckRoutePredicateFactory(){ super(Config.class); } @Override public Predicate apply(Config config) { log.info("=========MyCheckRoutePredicateFactory start=================="); log.info("=============================================================name=================="+config.getName()); return new GatewayPredicate() { @Override public boolean test(ServerWebExchange serverWebExchange) { if("drb".equals(config.getName())){ log.info("**********************************true:name=drb"); return true; } log.info("********************************false:name="+config.getName()); return false; } }; } public List shortcutFieldOrder() { return Collections.singletonList("name"); } public static class Config { @NotNull private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } }
过滤器
测试AddRequestHeader
@GetMapping("findOrder")
public ComResultEntity findOrders(@RequestParam(value = "id") String id,@RequestHeader("X-Request-Name") String name){
System.out.println("******************age="+age);
System.out.println("==================name="+name);
return orderFeignService.findOrders(id);
}
发起请求
自定义过滤器工厂,继承AbstractNamevalueGatewayFilterFactory即可
自定义全局过滤器,实现GlobalFilter即可
整合sentinel限流添加依赖:
com.alibaba.cloud
spring-cloud-starter-alibaba-sentinel
com.alibaba.csp
sentinel-spring-cloud-gateway-adapter
待续。。。



