那几个网站可以做h5,重庆建筑行业认证培训网,给别人做网站被诉侵权,网站开发兼职合同1. SpringCloud 与 SpringBoot的版本映射关系
在已有的Spring Boot项目中增加Spring Cloud#xff0c;首先要确定使用的Spring Cloud的版本#xff0c;这取决于项目使用的Spring Boot的版本 SpringCloud 与 SpringBoot的版本映射关系
如果两者的版本不兼容#xff0c;再会…1. SpringCloud 与 SpringBoot的版本映射关系
在已有的Spring Boot项目中增加Spring Cloud首先要确定使用的Spring Cloud的版本这取决于项目使用的Spring Boot的版本 SpringCloud 与 SpringBoot的版本映射关系
如果两者的版本不兼容再会报 Spring Boot [2.x.x] is not compatible with this Spring Cloud release train 2. spring-cloud-gateway配置
Spring Cloud Gateway旨在提供一种简单而有效的方式来路由API服务并为它们提供横切关注点例如:安全性、监控/指标和弹性。
目前的版本信息
2.1. 项目中如何包含spring-cloud-gateway
在项目中引入如下依赖 dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-gateway/artifactIdversion3.0.8/version/dependency注意
如果引入依赖但不希望启用网关请设置spring.cloud.gateway.enabledfalse。Spring Cloud Gateway构建在Spring Boot 2、Spring WebFlux、Project Reactor之上所以许多同步库(例如Spring Data和Spring Security)和模式可能不适用Spring Cloud Gateway需要Spring Boot和Spring Webflux提供的Netty Runtime。它不能在传统的Servlet容器中工作也不能作为WAR构建。
2.2. 基本术语
Route 路由: 网关的基本组成部分。它由一个ID、一个目标URI、一组谓词和一组过滤器定义。如果聚合谓词为真则匹配路由。Predicate 谓词: 一个Java 8函数谓词。输入类型为Spring Framework ServerWebExchange在编程时可以匹配HTTP请求中的任何内容例如 headers 或参数。Filter 过滤器: 使用特定工厂构造的GatewayFilter的实例可以在发送下游请求之前或之后修改请求和响应。
2.3. 如何工作
客户端向Spring Cloud Gateway发出请求。如果网关处理程序映射确定请求与路由匹配则将其发送到网关Web处理程序。此处理程序通过特定于请求的过滤器链【filter chain】运行请求。 过滤器用虚线分隔的原因是过滤器可以在发送代理请求之前和之后运行逻辑。执行所有“预”过滤器逻辑。然后发出代理请求。发出代理请求后将运行“post”过滤器逻辑。
2.4. 如何配置
路由谓词工厂 Route Predicate Factories 网关匹配路由作为Spring WebFlux HandlerMapping基础架构的一部分。Spring Cloud Gateway包括许多内置的路由谓词工厂。所有这些谓词都匹配HTTP请求的不同属性。可以将多个路由谓词工厂与逻辑和语句组合在一起。Gateway 过滤器工厂 路由过滤器允许以某种方式修改传入的HTTP请求或传出的HTTP响应。路由过滤器的作用域是特定的路由。Spring Cloud Gateway包括许多内置的GatewayFilter工厂。
路由谓词配置示例
即在spring boot的配置文件如application.yml中配置配置示例如下
spring:cloud:gateway:routes:- id: after_routeuri: https://example.orgpredicates:- After2017-01-20T17:42:47.789-07:00[America/Denver]- id: before_routeuri: https://example.orgpredicates:- Before2017-01-20T17:42:47.789-07:00[America/Denver]- id: between_routeuri: https://example.orgpredicates:- Between2017-01-20T17:42:47.789-07:00[America/Denver], 2017-01-21T17:42:47.789-07:00[America/Denver]- id: cookie_routeuri: https://example.orgpredicates:- Cookiechocolate, ch.p- id: header_routeuri: https://example.orgpredicates:- HeaderX-Request-Id, \d- id: host_routeuri: https://example.orgpredicates:- Host**.somehost.org,**.anotherhost.org- id: method_routeuri: https://example.orgpredicates:- MethodGET,POST- id: path_routeuri: https://example.orgpredicates:- Path/red/{segment},/blue/{segment}- id: query_routeuri: https://example.orgpredicates:- Queryred, gree.- id: remoteaddr_routeuri: https://example.orgpredicates:- RemoteAddr192.168.1.1/24# The Weight Route Predicate Factory- id: weight_highuri: https://weighthigh.orgpredicates:- Weightgroup1, 8- id: weight_lowuri: https://weightlow.orgpredicates:- Weightgroup1, 2
路由过滤器配置示例
spring:cloud:gateway:routes:- id: add_request_header_routeuri: https://example.orgpredicates:- Path/red/{segment}filters:- AddRequestHeaderX-Request-Red, Blue-{segment}- id: add_request_parameter_routeuri: https://example.orgpredicates:- Host: {segment}.myhost.orgfilters:- AddRequestParameterfoo, bar-{segment}- id: add_response_header_routeuri: https://example.orgpredicates:- Host: {segment}.myhost.orgfilters:- AddResponseHeaderfoo, bar-{segment}- id: prefixpath_routeuri: https://example.orgfilters:- PrefixPath/mypath- id: requestratelimiter_routeuri: https://example.orgfilters:- name: RequestRateLimiterargs:redis-rate-limiter.replenishRate: 10redis-rate-limiter.burstCapacity: 20redis-rate-limiter.requestedTokens: 1- id: prefixpath_routeuri: https://example.orgfilters:- RedirectTo302, https://acme.org代码配置示例 Beanpublic RouteLocator customRouteLocator(RouteLocatorBuilder builder) {//formatter:offRouteLocator routeLocator builder.routes().route(path_route, r - r.path(/get).uri(http://httpbin.org)).route(host_route, r - r.host(*.myhost.org).uri(http://httpbin.org)).route(rewrite_route, r - r.host(*.rewrite.org).filters(f - f.rewritePath(/foo/(?segment.*),/${segment})).uri(http://httpbin.org)).route(circuitbreaker_route, r - r.host(*.circuitbreaker.org).filters(f - f.circuitBreaker(c - c.setName(slowcmd))).uri(http://httpbin.org)).route(circuitbreaker_fallback_route, r - r.host(*.circuitbreakerfallback.org).filters(f - f.circuitBreaker(c - c.setName(slowcmd).setFallbackUri(forward:/circuitbreakerfallback))).uri(http://httpbin.org)).route(limit_route, r - r.host(*.limited.org).and().path(/anything/**,/bnything/**).filters(f - f.requestRateLimiter(c - c.setRateLimiter(redisRateLimiter()))).uri(http://httpbin.org)).route(websocket_route, r - r.path(/echo).uri(ws://localhost:9000)).build();return routeLocator;}3. Global Filter
GlobalFilter接口与GatewayFilter接口具有相同的签名。GlobalFilter是有条件地应用于所有路由的特殊过滤器。
当请求匹配路由时过滤web处理程序将GlobalFilter的所有实例和GatewayFilter的所有路由特定实例添加到过滤器链中。这个组合过滤器链由org.springframework.core.Ordered接口排序可以通过实现getOrder()方法来设置该接口。
接口示例
Bean
public GlobalFilter customFilter() {return new CustomGlobalFilter();
}public class CustomGlobalFilter implements GlobalFilter, Ordered {Overridepublic MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {log.info(custom global filter);return chain.filter(exchange);}Overridepublic int getOrder() {return -1;}
}4. 如何配置跨域CORS
spring:cloud:gateway:globalcors:cors-configurations:[/**]:allowedOrigins: https://docs.spring.ioallowedMethods:- GET5. http超时配置
全局配置
spring:cloud:gateway:httpclient:connect-timeout: 1000response-timeout: 5s特定路由配置 - id: per_route_timeoutsuri: https://example.orgpredicates:- name: Pathargs:pattern: /delay/{timeout}metadata:response-timeout: 200connect-timeout: 200import static org.springframework.cloud.gateway.support.RouteMetadataUtils.CONNECT_TIMEOUT_ATTR;
import static org.springframework.cloud.gateway.support.RouteMetadataUtils.RESPONSE_TIMEOUT_ATTR;Beanpublic RouteLocator customRouteLocator(RouteLocatorBuilder routeBuilder){return routeBuilder.routes().route(test1, r - {return r.host(*.somehost.org).and().path(/somepath).filters(f - f.addRequestHeader(header1, header-value-1)).uri(http://someuri).metadata(RESPONSE_TIMEOUT_ATTR, 200).metadata(CONNECT_TIMEOUT_ATTR, 200);}).build();}6. Actuator API
开启配置spring.cloud.gateway.actuator.verbose.enabledtrue 下表总结了Spring Cloud Gateway执行器端点(注意每个端点都以/actuator/gateway为基路径):
IDHTTP MethodDescriptionglobalfiltersGETDisplays the list of global filters applied to the routes.routefiltersGETDisplays the list of GatewayFilter factories applied to a particular route.refreshPOSTClears the routes cache.routesGETDisplays the list of routes defined in the gateway.routes/{id}GETDisplays information about a particular route.routes/{id}POSTAdds a new route to the gateway.routes/{id}DELETERemoves an existing route from the gateway.
附录
spring-cloud-gateway 在使用时还有很多其它需要关注的详见官方使用文档spring-cloud-gateway reference