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

什么网站有教做变蛋的长沙市网站制作

什么网站有教做变蛋的,长沙市网站制作,自助众筹网站建设,平面设计师的网站文章目录 前言一、为什么需要扩展 Spring Cloud Gateway?二、Spring Cloud Gateway 核心扩展点三、扩展点实战:代码与配置详解3.1 全局过滤器(GlobalFilter)3.2 路由过滤器(GatewayFilter)2.3 自定义路由断…

文章目录

  • 前言
  • 一、为什么需要扩展 Spring Cloud Gateway?
  • 二、Spring Cloud Gateway 核心扩展点
  • 三、扩展点实战:代码与配置详解
    • 3.1 全局过滤器(GlobalFilter)
    • 3.2 路由过滤器(GatewayFilter)
    • 2.3 自定义路由断言(RoutePredicateFactory)
    • 3.4 动态路由(RouteLocator)
    • 3.5 自定义异常处理
  • 四、扩展实践注意事项
  • 总结


前言

在微服务架构中,API 网关扮演着流量入口的核心角色。它不仅需要高效路由请求,还要承担安全防护、流量治理、协议转换等关键职责。Spring Cloud Gateway 作为 Spring Cloud 生态的官方网关组件,凭借其 高性能响应式编程模型高度可扩展性,已成为众多企业构建微服务架构的首选。

然而,随着业务复杂度的提升,开发者往往会面临以下挑战:

  • 如何快速响应动态路由需求?
  • 怎样统一管理跨服务的认证与日志?
  • 能否低成本实现业务定制化逻辑?
    这些问题的答案,都藏在 Spring Cloud Gateway 的 扩展点设计 中。

一、为什么需要扩展 Spring Cloud Gateway?

Spring Cloud Gateway 作为 Spring Cloud 生态的 API 网关组件,默认提供了路由转发、负载均衡、限流熔断等核心能力。但在实际生产环境中,业务场景往往更加复杂,开发者通常需要基于以下需求进行扩展:

  1. 定制路由规则:默认路由配置无法满足动态路由、灰度发布等高级需求。
  2. 统一认证与授权:需要全局拦截请求,集成 JWT、OAuth2 等安全协议。
  3. 业务逻辑处理:如请求参数校验、响应体修改、接口耗时统计等。
  4. 监控与日志:记录请求链路日志,集成 Prometheus 监控指标。
  5. 适配遗留系统:兼容老系统协议转换(如 SOAP → REST)。

二、Spring Cloud Gateway 核心扩展点

Spring Cloud Gateway 提供了丰富的扩展接口,以下是 5 大核心扩展点:

扩展点作用域典型场景
GlobalFilter全局认证、日志、限流
GatewayFilter路由级别修改请求头、重试策略
RoutePredicateFactory路由匹配自定义路由条件(如IP白名单)
RouteLocator路由加载动态路由(如数据库配置)
自定义异常处理全局/路由统一异常响应格式

三、扩展点实战:代码与配置详解

3.1 全局过滤器(GlobalFilter)

场景: 记录请求耗时与状态码。

@Component
public class RequestLoggingGlobalFilter implements GlobalFilter, Ordered {private static final Logger LOG = LoggerFactory.getLogger(RequestLoggingGlobalFilter.class);@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {long startTime = System.currentTimeMillis();String path = exchange.getRequest().getPath().toString();return chain.filter(exchange).then(Mono.fromRunnable(() -> {long duration = System.currentTimeMillis() - startTime;int statusCode = exchange.getResponse().getStatusCode() != null ? exchange.getResponse().getStatusCode().value() : 500;LOG.info("Path: {} | Status: {} | Time: {}ms", path, statusCode, duration);}));}@Overridepublic int getOrder() {return Ordered.LOWEST_PRECEDENCE; // 最后执行}
}

3.2 路由过滤器(GatewayFilter)

场景: 为特定路由添加自定义请求头。
步骤1:实现 GatewayFilterFactory

@Component
public class AddHeaderGatewayFilterFactory extends AbstractGatewayFilterFactory<AddHeaderGatewayFilterFactory.Config> {public AddHeaderGatewayFilterFactory() {super(Config.class);}@Overridepublic GatewayFilter apply(Config config) {return (exchange, chain) -> {ServerHttpRequest request = exchange.getRequest().mutate().header(config.getHeaderName(), config.getHeaderValue()).build();return chain.filter(exchange.mutate().request(request).build());};}public static class Config {private String headerName;private String headerValue;// Getter & Setter}
}

步骤2:配置路由

spring:cloud:gateway:routes:- id: user-serviceuri: lb://user-servicepredicates:- Path=/api/user/**filters:- AddHeader=X-Custom-Header, HelloGateway

2.3 自定义路由断言(RoutePredicateFactory)

场景: 仅允许特定 IP 访问管理接口。

@Component
public class IpAllowPredicateFactory extends AbstractRoutePredicateFactory<IpAllowPredicateFactory.Config> {public IpAllowPredicateFactory() {super(Config.class);}@Overridepublic Predicate<ServerWebExchange> apply(Config config) {return exchange -> {String clientIp = exchange.getRequest().getRemoteAddress().getAddress().getHostAddress();return config.getAllowedIps().contains(clientIp);};}public static class Config {private List<String> allowedIps;// Getter & Setter}
}

配置示例:

routes:- id: admin-routeuri: lb://admin-servicepredicates:- Path=/admin/**- IpAllow=192.168.1.100, 192.168.1.101

3.4 动态路由(RouteLocator)

场景: 从数据库加载路由配置。

@Bean
public RouteLocator dynamicRouteLocator(RouteDefinitionLocator locator) {return new RouteLocator() {@Overridepublic Flux<Route> getRoutes() {return locator.getRouteDefinitions().flatMap(routeDefinition -> {// 从数据库查询动态规则RouteDefinition updatedDef = queryDynamicRules(routeDefinition.getId());return RouteDefinitionRouteLocator.loadRoute(updatedDef);});}};
}

3.5 自定义异常处理

场景: 统一返回 JSON 格式错误信息。

@Bean
public ErrorWebExceptionHandler customExceptionHandler() {return new DefaultErrorWebExceptionHandler() {@Overrideprotected Mono<ServerResponse> renderErrorResponse(ServerRequest request) {// 1. 获取原始异常Throwable error = getError(request);// 2. 构建标准化响应体Map<String, Object> body = Map.of("code": 500,"message": error.getMessage(),"timestamp": Instant.now());// 3. 返回JSON格式响应return ServerResponse.status(500).contentType(MediaType.APPLICATION_JSON).bodyValue(body);}};
}

四、扩展实践注意事项

  1. 执行顺序:通过 @Order 或实现 Ordered 接口控制过滤器执行顺序。
  2. 性能影响:避免在过滤器中执行阻塞操作(如同步数据库调用),推荐响应式编程。
  3. 配置热更新:结合 Spring Cloud Bus 实现动态配置刷新。
  4. 测试策略:使用 WebTestClient 编写单元测试验证过滤器逻辑。

总结

通过灵活运用 Spring Cloud Gateway 的扩展点,开发者可以轻松实现 路由定制化业务逻辑增强系统可观测性 等高级功能。本文提供的代码示例与配置可直接应用于生产环境,建议根据实际需求调整细节,并利用监控工具(如 Grafana)持续优化网关性能。

http://www.dtcms.com/wzjs/30570.html

相关文章:

  • 企业站seo价格关键词优化seo外包
  • 国际公司办公室装修天津网站优化公司
  • 个人网站做哪种类型网络营销的基本流程
  • 如何查网站的百度快照网络营销的现状及问题
  • 南宁国贸网站建设无屏蔽搜索引擎
  • 长春 餐饮 网站建设技术培训平台
  • web网站开发课程设计报告唯尚广告联盟
  • 别人帮自己做网站有后门吗淄博新闻头条最新消息
  • 做网站的哪里好今日国内新闻头条
  • 外国网站接单做翻译seo描述快速排名
  • wordpress入门建站教程二seo网站排名优化快速排
  • 集团网站开发免费网站安全检测
  • 全屏网站尺寸新东方烹饪培训学校
  • 党委门户网站建设方案东莞seo网站推广建设
  • 建设路84号 网站备案百度网盘资源搜索入口
  • 网站建设 方案 评价表成品人和精品人的区别在哪
  • 为拟建设的网站申请一个域名seo搜索引擎优化试题
  • 做网站开发人员架构网站推广关键词排名优化
  • 安什么网站建设seo推广哪家公司好
  • 北京高端网站建设制作设计杭州百度快照优化公司
  • 澄海建设局网站上不了优化落实防控措施
  • 美国设计网站关键词你们懂的
  • 如何做超一个电子商务网站企业推广app
  • 最好国内免费网站空间wordpress网站建设
  • 安徽安庆网站建设公司陕西网站建设制作
  • 注册公司的网站是什么营销型网站和普通网站
  • 网站建设开发教程如何注册网站
  • 企业网站开发效果线上营销活动主要有哪些
  • 网站未备案怎么做淘宝客百度指数在线查询工具
  • 做网站用什么格式做好推广搜索引擎