首页 > 编程知识 正文

gateway路由配置,网关有什么用

时间:2023-05-05 10:55:17 阅读:144421 作者:3545

网关旨在提供简单有效地路由API的方法,以及强大的过滤功能,如熔断、电流限制和重试

——概念Spring Cloud Gateway使用的web flux reactor-netty响应编程组件基于Netty通信框架,在异步异步异步阻塞中应用场景:反向代理、身份验证、流量控制、熔断、日志监视器和Zuul之间的区别:

概念动态路由:能够满足任何请求属性是构建网关的基本模块,由ID、目标URI、一系列断言和筛选器组成。 如果断言为true,则匹配路由断言。 请参阅JAVA8中的java.util.function.Predicate。 开发人员可以满足HTTP请求的所有内容。 如果请求与断言匹配,则进行路由过滤。 指向Spring框架中网关过滤器的实例,可以使用过滤器在路由请求之前或之后更改请求的核心逻辑。 路由转发执行过滤器链——实际运行pom! ---网关----dependencygroupidorg.spring framework.cloud/groupidartifactidspring-cloud-starter-gateway/artifaccacy ependencyymlserver : port :9527 spring : application : name : cloud -网关云:网关3360 loud 打开从注册中心动态创建路由的功能,并使用微服务名进行路由的routes :-id : payment _ Routh #路由的id。 虽然没有固定规则,但要求统一。 根据服务名称# uri :3358 localhost :8001 #提供服务的路由地址uri : lb ://cloud-payment-service predicates 3360 # #-after=2020-09-15t 1533605336047.02608336000 [ Asia/Shanghai ] #将在此时间后生效。 #-before=2020-09-15t 15336000 Shanghai ] #在此时间之前生效#-between=2020-09-15t 1533605:47.02608336000 [ Asia/shaa ] 2020-09-15t 1633605336047.02608336000 [ Asia/Shanghai ] #在此期间生效,# - Cookie=username,xlj #只有cookie将username d #包含指定的请求标头,value是以数字# - Host=**.baidu.com #指定的主机,在GET中启用# - Method=GET #请求方法- id : paymemed 没有固定的。建议根据服务名# uri :3358 localhost :8001 #提供服务的路由地址uri : lb ://cloud-payment-seseet 与payments路径对应的路由eureka :实例3360 hostname :云网关服务客户端3360服务- URL 3360 fetch-registry 3360 true在eureka register-with-eureka : true #集群eurekadefaultzone :3358 eureka 700133607001/eureka上注册服务,3http://eureka 独立版eureka # default zone :3358 localhost 33607001/eureka http://www.Sina.com /

yml文件配置spring : application : name : cloud -网关云3360网关3360 routes 3360

- id: payment_routh # 路由的id,没有固定的规则但要求统一,建议配合服务名 uri: http://localhost:8001 # 匹配后提供服务的路由地址 predicates: - Path=/payment/get/** # 断言,路径相对应的进行路由 - id: payment_routh2 # 路由的id,没有固定的规则但要求统一,建议配合服务名 uri: http://localhost:8001 # 匹配后提供服务的路由地址 predicates: - Path=/payment/lb/** # 断言,路径相对应的进行路由 配置类 @Bean public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder) { RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes(); // 访问http://localhost:9527/guonei跳转到http://news.baidu.com/guonei routes.route("path_route_xlj", r -> r.path("/guonei").uri("http://news.baidu.com/guonei")).build(); return routes.build(); } 通过微服务名实现动态路由 spring: application: name: cloud-gateway cloud: gateway: discovery: locator: enabled: true # 开启从注册中心动态创建路由的功能,利用微服务名进行路由 routes: - id: payment_routh # 路由的id,没有固定的规则但要求统一,建议配合服务名# uri: http://localhost:8001 # 匹配后提供服务的路由地址 uri: lb://cloud-payment-service predicates: - Path=/payment/get/** # 断言,路径相对应的进行路由 - id: payment_routh2 # 路由的id,没有固定的规则但要求统一,建议配合服务名# uri: http://localhost:8001 # 匹配后提供服务的 路由地址 uri: lb://cloud-payment-service predicates: - Path=/payment/lb/** # 断言,路径相对应的进行路由

断言

predicates: # 断言 - Path=/payment/get/** # 指定的路径才可生效 - After=2020-09-15T15:53:47.026+08:00[Asia/Shanghai] # 在此时间之后生效 - Before=2020-09-15T15:53:47.026+08:00[Asia/Shanghai] # 在此时间之前生效 - Between=2020-09-15T15:53:47.026+08:00[Asia/Shanghai],2020-09-15T16:53:47.026+08:00[Asia/Shanghai] # 在此时间之间生效 - Cookie=username,xlj # 只有cookie包含username,并且value为xlj才生效 - Header=X-Request-Id,d+ # 包含指定请求头,value为数字 - Host=**.baidu.com # 指定主机才可访问 - Method=GET # 请求方法为GET才生效

自定义配置过滤器

public class LogGatewayFilter implements GlobalFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { log.info("*****come in LogGatewayFilter"+ new Date()); String username = exchange.getRequest().getQueryParams().getFirst("username"); if (StringUtils.isEmpty(username)){ log.info("***用户名为空,非法进入"); exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE); return exchange.getResponse().setComplete(); } return chain.filter(exchange); } @Override public int getOrder() { return 0; }}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。