当前位置: 首页 > wzjs >正文

网站建设哪些会影响价格嘉兴公司的网站设计

网站建设哪些会影响价格,嘉兴公司的网站设计,yw193can未满十8麻豆,在哪网站可以做农信社模拟试卷一,Gateway概念 Spring Cloud Gateway(简称 Gateway)是一个基于 Spring WebFlux 的 API 网关解决方案,旨在为微服务架构中的客户端提供路由、负载均衡、认证、限流、监控等功能。它作为微服务架构中的流量入口,通常位…

 一,Gateway概念

Spring Cloud Gateway(简称 Gateway)是一个基于 Spring WebFlux 的 API 网关解决方案,旨在为微服务架构中的客户端提供路由、负载均衡、认证、限流、监控等功能。它作为微服务架构中的流量入口,通常位于客户端和后端微服务之间,处理来自客户端的请求并将其路由到相应的服务。

主要特性

  1. 路由功能:Spring Cloud Gateway 可以根据请求的不同特征(如路径、方法、头部、参数等)将请求路由到不同的微服务。
  2. 负载均衡:支持与服务注册中心(如 Eureka)集成,能够将流量分发到多个实例,以实现负载均衡。
  3. 过滤器:提供了丰富的过滤器功能,可以在请求和响应的生命周期中进行定制化处理。例如,身份认证、日志记录、限流等。
  4. 反向代理:可以将请求转发给后端服务,实现反向代理功能。
  5. 高可用和可扩展性:通过与 Spring Cloud 配合使用,Spring Cloud Gateway 能够在微服务架构中提供高可用和扩展性支持。
  6. 监控:可以与 Spring Boot Actuator 集成,提供请求和响应的监控功能,帮助开发人员监控系统的健康状况和性能。

二,基本路由

        路由是将客户端请求发送到后端服务的主要组件。它定义了请求的匹配规则以及请求将被转发到的目标(即URI)。每个路由都具有一个iduri以及predicates

  • id:每个路由的唯一标识符。
  • uri:路由转发的目标URI。对于lb://协议,它指向服务注册中心(如Eureka)中的服务,表示请求将被转发到注册的服务。
  • predicates:定义了路由的匹配条件,决定哪些请求将被此路由处理。
spring:cloud:gateway:routes:- id: order-routeuri: lb://service-orderpredicates:- Path=/api/order/**

三,断言

        断言(Predicates) 用于根据请求的各种属性来匹配路由,它们是路由的核心部分。断言支持不同的匹配条件,如路径、请求方法、请求头等。通过不同的请求模式来匹配对应的微服务。

3.1在Spring Cloud Gateway的配置中,断言有两种写法:

  • 长写法:指定完整的断言语法,明确标明断言的类型。
spring:cloud:gateway:routes:- id: order-routeuri: lb://service-orderpredicates:- name: Pathargs:pattern: /api/order/**
  • 短写法:是断言的简化写法,直接使用断言类型的简洁形式。
spring:cloud:gateway:routes:- id: order-routeuri: lb://service-orderpredicates:- Path=/api/order/**

系统内置断言(Predicates)

Spring Cloud Gateway 提供了很多内置的断言类型,用来处理各种请求匹配需求。常用的断言类型包括:

        这张图展示了Spring Cloud Gateway中常用的路由断言(Predicates)及其相关参数说明。断言是路由配置的重要组成部分,它们用来判断请求是否满足特定条件,以决定是否将请求转发到目标服务。每种断言都允许通过指定参数来对请求进行详细匹配。 

3.2自定义断言

我们通过继承 AbstractRoutePredicateFactory 类,创建了一个名为 VipRoutePredicateFactory 的类,实现了自定义的路由断言逻辑,示例代码如下:

import org.springframework.cloud.gateway.handler.predicate.AbstractRoutePredicateFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.apache.commons.lang3.StringUtils;import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;/*** 自定义路由断言工厂*/
@Component
public class VipRoutePredicateFactory extends AbstractRoutePredicateFactory<VipRoutePredicateFactory.Config> {public VipRoutePredicateFactory() {super(Config.class);  // 传入Config类}@Overridepublic List<String> shortcutFieldOrder() {// 返回配置类中的字段顺序return Arrays.asList("param", "value");}@Overridepublic Predicate<ServerWebExchange> apply(Config config) {return new GatewayPredicate() {@Overridepublic boolean test(ServerWebExchange serverWebExchange) {// 获取请求ServerHttpRequest request = serverWebExchange.getRequest();// 从请求的查询参数中获取 'param' 对应的值String first = request.getQueryParams().getFirst(config.param);// 比较查询参数的值与配置中的 'value' 是否匹配return StringUtils.isNotBlank(first) && first.equals(config.value);}};}// 配置类public static class Config {private String param;  // 查询参数名称private String value;  // 查询参数期望的值// Getter和Setter方法public String getParam() {return param;}public void setParam(String param) {this.param = param;}public String getValue() {return value;}public void setValue(String value) {this.value = value;}}
}
VipRoutePredicateFactory
  • 该类继承自 AbstractRoutePredicateFactory,实现了自定义断言工厂的功能。AbstractRoutePredicateFactory 是 Spring Cloud Gateway 提供的基础类,用于创建自定义的路由断言。我们将 Config.class 作为构造函数的参数传递给父类,表示我们会用 Config 类来存储断言所需的配置参数。

shortcutFieldOrder() 方法
  • 这个方法返回一个 List<String>,用于定义配置类中字段的顺序。在这个例子中,paramvalue 的顺序决定了用户在配置时,paramvalue 应该以这个顺序出现。Spring Cloud Gateway 使用 shortcutFieldOrder() 方法来生成简洁的 YAML 配置。

spring:cloud:gateway:routes:- id: vip-routeuri: https://example.compredicates:- name: Vip(RoutePredicateFactory)//vip是断言工厂名前缀args:param: qvalue: test

apply(Config config) 方法

  • 这个方法用于应用自定义断言的逻辑,接收 Config 类的实例作为参数。Config 类包含了路由断言所需的参数(paramvalue)。该方法返回一个 Predicate<ServerWebExchange>,用于对每个请求进行断言判断。

这里的 Predicate<ServerWebExchange> 表示一个函数,它接收一个 ServerWebExchange(表示当前请求),并返回一个布尔值,表示该请求是否匹配该断言。

 test(ServerWebExchange serverWebExchange) 方法

  • 在这个方法中,我们实际执行请求的匹配逻辑。首先通过 serverWebExchange.getRequest() 获取当前请求对象。接着,我们从请求的查询参数中获取与 config.param 对应的值,存储在 first 变量中。

  • 然后,我们检查 first 是否为空,并与 config.value 进行比较。如果它们相等,并且查询参数不为空,我们返回 true,表示路由匹配成功;否则返回 false,表示路由不匹配。

 Config

  • Config 类是一个静态类,用来存储自定义断言需要的配置参数。这里有两个字段:param 表示查询参数的名称,value 表示查询参数的期望值。用户通过配置文件传入这两个参数。

  • Config 类的作用是封装从配置文件中读取的参数,并通过 @Validated 等注解进行验证

四,过滤器

        过滤器(Filters) 是用于在请求和响应过程中执行特定操作的机制。它们是在路由决策之前或之后执行的,可以对请求进行修改(如添加头部、修改请求体)或响应进行处理(如修改响应内容、记录日志等)。过滤器的使用大致可以分为两种类型:前置过滤器(pre-filter)和后置过滤器(post-filter)。前置过滤器在请求到达目标服务之前执行,后置过滤器则在响应返回客户端之前执行。过滤器主要用于以下目的:
  • 请求和响应的修改。
  • 安全性(如身份验证)。
  • 负载均衡和限流。
  • 请求日志和性能监控。

4.1基本的过滤器使用步骤:

添加依赖: 需要在pom.xml文件中加入Spring Cloud Gateway的依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

创建过滤器: 可以通过实现GatewayFilter接口来创建自定义过滤器。Spring Cloud Gateway提供了GatewayFilter接口和GlobalFilter接口,分别用于处理特定路由和全局的请求过滤。

import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;@Component
public class MyCustomFilter implements GatewayFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 在请求处理之前执行的逻辑System.out.println("请求被过滤: " + exchange.getRequest().getURI());// 执行后续过滤器链return chain.filter(exchange);}
}

注册过滤器: 自定义过滤器可以通过注入GatewayFilter的方式注册到Spring的上下文中。可以将过滤器注入到@Configuration中,或者直接使用@Component注解让其自动注册。

配置路由过滤器: 在路由配置中,可以为某个特定的路由设置过滤器。

spring:cloud:gateway:routes:- id: my_routeuri: http://httpbin.org:80predicates:- Path=/getfilters:- name: RequestHeaderToRequestUriargs:name: X-Request-Id

4.2全局过滤器使用步骤:

全局过滤器是应用于所有路由请求的过滤器,它们在请求到达目标服务之前和响应返回时都会被执行。全局过滤器对于记录日志、身份验证等场景非常有用。 

import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;@Component
public class LoggingGlobalFilter implements GlobalFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 记录请求的URLString path = exchange.getRequest().getURI().getPath();System.out.println("Request Path: " + path);// 继续处理链中的下一个过滤器return chain.filter(exchange);}
}

4.3自定义过滤器使用步骤:

Spring Cloud Gateway允许开发者创建自定义过滤器。自定义过滤器有两种类型:

  • GatewayFilter:只能作用于单个路由。
  • GlobalFilter:作用于所有路由。
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.http.HttpStatus;
import reactor.core.publisher.Mono;@Component
public class LoggingGlobalFilter implements GlobalFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 获取请求的路径String path = exchange.getRequest().getURI().getPath();// 记录请求的路径System.out.println("Request Path: " + path);// 向请求中添加一个自定义的请求头exchange.getRequest().mutate().header("X-Request-ID", "Request-" + System.currentTimeMillis())  // 设置一个自定义请求头.build();// 继续处理请求return chain.filter(exchange).doOnTerminate(() -> {// 记录响应结束时的日志System.out.println("Request " + path + " processed.");});}
}
  • LoggingGlobalFilter 实现了 GlobalFilter 接口

    • 该过滤器会应用于所有的请求,不管是哪个路由请求都会执行这个过滤器的逻辑。
  • filter() 方法

    • 在这个方法中,首先我们通过 exchange.getRequest().getURI().getPath() 获取当前请求的路径。
    • 然后,我们通过 System.out.println() 打印日志,记录下请求的路径。
    • 接着,我们使用 mutate() 方法修改请求,添加了一个自定义的请求头 X-Request-ID,其值为当前时间戳(这样可以在日志中唯一标识每个请求)。
    • 最后,通过 chain.filter(exchange) 将请求继续传递给下一个过滤器链

4.4过滤器的执行顺序

Spring Cloud Gateway的过滤器按以下顺序执行:

  • 请求过滤器:请求从客户端进入网关后,过滤器链会逐个执行请求过滤器。
    • 过滤器执行顺序是链式的:GlobalFilter -> GatewayFilter
  • 响应过滤器:请求被转发到目标服务,响应返回时,再次按链式执行响应过滤器。

4.5常用过滤器

Spring Cloud Gateway提供了一些内置的过滤器,可以直接使用。例如:

  • AddRequestHeader:添加请求头部。
  • AddResponseHeader:添加响应头部。
  • RemoveRequestHeader:删除请求头部。
  • RemoveResponseHeader:删除响应头部。
  • SetPath:修改请求路径。
  • RewritePath:重写路径。
添加请求头的过滤器举例:
spring:cloud:gateway:routes:- id: add-header-routeuri: http://localhost:8081predicates:- Path=/add-header/**filters:- AddRequestHeader=X-Custom-Header, Value


文章转载自:

http://12QgqqOL.Lsnbx.cn
http://q1abOxRC.Lsnbx.cn
http://qNFmOuYm.Lsnbx.cn
http://7L4eiaxD.Lsnbx.cn
http://3HQLERh6.Lsnbx.cn
http://nxp90kGQ.Lsnbx.cn
http://cIv4VEXq.Lsnbx.cn
http://OLJm49MT.Lsnbx.cn
http://lQUczEAi.Lsnbx.cn
http://jCvAbjXc.Lsnbx.cn
http://OIIkq9JK.Lsnbx.cn
http://kXeMwsbC.Lsnbx.cn
http://hOoaNyrj.Lsnbx.cn
http://sOv60PUf.Lsnbx.cn
http://VHXapTcv.Lsnbx.cn
http://D4o62TPS.Lsnbx.cn
http://lReOFX7Y.Lsnbx.cn
http://ZSvhGCoB.Lsnbx.cn
http://wKjmHbUq.Lsnbx.cn
http://gorxHjAj.Lsnbx.cn
http://TdJvkA77.Lsnbx.cn
http://sx94o1pM.Lsnbx.cn
http://atjiJkIg.Lsnbx.cn
http://dvSCa4wb.Lsnbx.cn
http://PDaJMaaH.Lsnbx.cn
http://TILUAwGg.Lsnbx.cn
http://1Jx6ugpD.Lsnbx.cn
http://tmR2Igpc.Lsnbx.cn
http://80C3zQPw.Lsnbx.cn
http://sidVQnPV.Lsnbx.cn
http://www.dtcms.com/wzjs/682982.html

相关文章:

  • 上海网站排名推广搭建平台畅通渠道
  • 什么样的网站适合推广最简单的网站建设语音
  • 义乌义亭招工做网站养猪工作家具网站首页设计
  • 商品网站建设及推广策划书个人怎么接外贸订单
  • .net开发网站怎么样时事热点新闻事件
  • 北京移动官网网站建设南宁免费自助建站模板
  • 曹县做网站建设wordpress主题汉化实战
  • 省运会官方网站建设怎么做企业的网站首页
  • 企业被网站收录网店网站建设策划书案例
  • .net网站开发工具介绍抖音搜索推广首选帝搜软件平台
  • 前端做数据表格的网站新网站建设的工作
  • 知道网站是wp程序做的如何仿站中层管理者培训课程有哪些
  • 如何评价一个网站做的好不好企业所得税怎么算的
  • 余姚物流做网站上海贸易公司排名
  • 网站开发工程师就业形势余姚网站建设yyshj
  • 网站开发怎样实现上传视频快排seo
  • 手机网站如何制作开发网站找什么公司
  • 新公司网站建设流程优化大师班级
  • 做玄幻封面素材网站羽毛球赛事重播
  • 苏州自助建站模板网站建设困难吗
  • 设计师交流网站wordpress图片备用地址
  • 淘客网站cms怎么做顺德网页制作公司
  • wordpress 下拉菜单插件网站优化前景
  • 咖啡网站开发公司网站开发哪家好
  • 商盈网站建设seo研究中心
  • 一个彩票网站建设做网站最适合用多大的图片
  • 百度网站地图文件手机微信网站模板
  • 广州做网站优化哪家好视频网站怎么做动图
  • 做一个网站一般费用wordpress娱乐插件
  • 威海网站制作都有哪些网站建设公司都会有哪些花销