当前位置: 首页 > 科技观察

SpringCloudGateway的这些知识点你都知道吗?

时间:2023-03-13 08:04:06 科技观察

环境:Springboot2.4.12+SpringCloudGateway2.2.9.RELEASEhttp超时(响应和连接)可以为所有路由配置并覆盖每个特定路由。全局超时配置使用实例来设置http全局超时。连接超时必须以毫秒为单位指定。response-timeout必须指定为java.time.Duration示例:spring:cloud:gateway:httpclient:connect-timeout:2000response-timeout:5sperroutetimeout配置设置路由超时。连接超时必须以毫秒为单位指定。必须以毫秒为单位指定响应超时。spring:cloud:gateway:enabled:truediscovery:locator:enabled:truelowerCaseServiceId:truedefault-filters:-StripPrefix=1routes:-id:R003uri:http://localhost:8082谓词:-Path=/api-x/demos/date3metadata:#局超时设置connect-timeout:10000response-timeout:50000使用JavaDSL配置importstaticorg.springframework.cloud.gateway.support.RouteMetadataUtils.CONNECT_TIMEOUT_ATTR;importstaticorg.springframework.cloud.gateway.support.RouteMetadataUtils.RESPONSE_TIMEOUT_ATTR;@BeanpublicRouteLocatorcustomRouteLocator(RouteLocatorBuilderrouteBuilder){returnrouteBuilder.routes().route("test1",r->{returnr.host("*.pack.com").and().path("/products").filters(f->f.addRequestHeader("api-key","abc")).uri("http://someuri").metadata(RESPONSE_TIMEOUT_ATTR,2000).metadata(CONNECT_TIMEOUT_ATTR,2000);}).build();}每个路由的响应超时负值将禁用全局响应超时值-id:per_route_timeoutsuri:https://pack.compredicates:-name:Pathargs:pattern:/delay/{timeout}元数据:响应超时:-1流畅的路由配置为了在Java中轻松配置,RouteLocatorBuilderbean包含一个流畅的API。它的工作方式如下面的代码清单所示:@BeanpublicRouteLocatorcustomRouteLocator(RouteLocatorBuilderbuilder,ThrottleGatewayFilterFactorythrottle){returnbuilder.routes().route(r->r.host("**.abc.org").and().path("/image/png").filters(f->f.addResponseHeader("X-TestHeader","foobar")).uri("http://httpbin.org:80")).route(r->r.path("/image/webp").filters(f->f.addResponseHeader("X-AnotherHeader","baz")).uri("http://httpbin.org:80").metadata("key","value")).route(r->r.order(-1).host("**.throttle.org").and().path("/get").filters(f->f.filter(throttle.apply(1,1,10,TimeUnit.SECONDS))).uri("http://httpbin.org:80").metadata("key","value")).build();}此样式还允许更多自定义谓词断言。RouteDefinitionLocatorbean定义的谓词使用逻辑与组合。通过使用流畅的JavaAPI,可以在Predicate类上使用and()、or()和negate()运算符。DiscoveryClient路由您可以将网关配置为基于在DiscoveryClient兼容服务注册表中注册的服务创建路由,这些服务可以通过服务名称直接访问。要启用此功能,请将spring.cloud.gateway.discovery.locator.enabled设置为true并确保在类路径上启用DiscoveryClient实现(例如NetflixEureka、Consul、Zookeeper或Nacos)。默认情况下,网关为DiscoveryClient创建的路由定义谓词和过滤器。默认谓词是使用模式/serviceId/**定义的路径谓词,其中serviceId是来自DiscoveryClient的服务的ID。默认过滤器是正则表达式/serviceId/?(?.*)和替换/${remaining}的重写路径过滤器。这将在向下游发送请求之前从路径中删除服务ID。如果要自定义DiscoveryClient路由使用的谓词或过滤器,可以设置spring.cloud.gateway.discovery.locator.predicate[x]和spring.cloud.gateway.discovery.locator.filters[y]。执行此操作时,如果要保留默认谓词和过滤器,则需要确保包括前面显示的默认谓词和过滤器。如下面的例子所示:spring.cloud.gateway.discovery.locator.predicates[0].name:Pathspring.cloud.gateway.discovery.locator.predicates[0].args[pattern]:"'/'+serviceId+'/**'"spring.cloud.gateway.discovery.locator.predicates[1].name:Hostspring.cloud.gateway.discovery.locator.predicates[1].args[pattern]:"'**.foo.com'"spring.cloud.gateway.discovery.locator.filters[0].name:CircuitBreakerspring.cloud.gateway.discovery.locator.filters[0].args[name]:serviceIdspring.cloud.gateway.discovery.locator.过滤器[1].name:RewritePathspring.cloud.gateway.discovery.locator.filters[1].args[regexp]:"'/'+serviceId+'/?(?.*)'"spring.cloud.gateway.discovery.locator.filters[1].args[replacement]:"'/${remaining}'"完成!!!