当前位置: 首页> 健康> 母婴 > 辽宁建设工程信息网抚顺_河北建筑工程学院招生信息网_北京seo推广优化_苏州seo关键词优化排名

辽宁建设工程信息网抚顺_河北建筑工程学院招生信息网_北京seo推广优化_苏州seo关键词优化排名

时间:2025/7/14 11:57:13来源:https://blog.csdn.net/weixin_47068446/article/details/144569592 浏览次数:0次
辽宁建设工程信息网抚顺_河北建筑工程学院招生信息网_北京seo推广优化_苏州seo关键词优化排名

文章目录

  • 什么是gateway
  • 如何导入gateway依赖
  • 路由配置
  • gateway配置断路器
    • 导包
    • 配置

什么是gateway

在微服务架构中,gateway网关是一个服务,它作为系统的唯一入口点,处理所有的客户端请求,然后将这些请求路由到适当的服务。提供了几个关键功能:
1.请求路由:根据请求的URL路径和其他参数,将请求路由到正确的后端服务。
2.负载均衡:在多个服务实例之间分配流量,以提高可用性和可扩展性。
3.认证和授权:检查用户是否有权访问特定的服务。
4.限流:控制访问后端服务的请求速率,以防止过载。
5.监控:收集关于API使用情况的统计数据,用于分析和计费。
6.日志记录:记录所有通过网关的请求和响应,以便进行问题排查和性能监控。
7.缓存:提高响应速度和减少后端负载,通过缓存常见的响应。
8.过滤:检验当前的请求是否符合请求的规则。

在这里插入图片描述
客户端向 Spring Cloud Gateway 发出请求。如果 Gateway Handler Mapping 确定请求与路由匹配,则将其发送到 Gateway Web Handler。此处理程序通过特定于该请求的过滤器链运行该请求。过滤器被虚线分开的原因是过滤器可以在发送代理请求之前和之后运行逻辑。所有“前”过滤器逻辑都​​会执行。然后发出代理请求。发出代理请求后,运行“后”过滤器逻辑。

如何导入gateway依赖

1.导包

<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>>2021.0.5</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2021.0.6.1</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>

2.配置yaml文件

spring:cloud:gateway:discovery:locator:lower-case-service-id: trueenabled: truedefault-filters:- name: CircuitBreakerargs:name: myCircuitBreakerfallbackUri: forward:/fallback //默认的兜底策略routes:- id: fee-serviceuri: lb://fee-service //指定的服务predicates:- Path=/query  //断言

路由配置

1.配置路由谓词工厂和网关过滤器工厂
配置谓词和过滤器有两种方式:快捷方式和完全展开参数。
名称和参数名称将列code在每个部分的第一句或第二句中。参数通常按快捷方式配置所需的顺序列出。
快捷方式配置由过滤器名称识别,后跟等号(=),后跟用逗号分隔的参数值(,)。
配置文件实现:

spring:cloud:gateway:routes:- id: after_routeuri: https://example.orgpredicates:- Cookie=mycookie,mycookievalue

java代码实现过滤方式:

@Configuration
public class GateConfig {@Beanpublic RouteLocator routeLocator(RouteLocatorBuilder builder) {return builder.routes().route(r -> r.path("/check").filters(f -> f.filter(new IpWhitelistFilter()))  // 注册过滤器.uri("lb://fee-service")).build();}
}
package com.umpay.config;import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.http.HttpStatus;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;/*** @author zq* data 2024-12-18*/
@Configuration
@Slf4j
public class IpWhitelistFilter implements GatewayFilter, Ordered {private static final String ALLOWED_IPS = "allowedIps";private static final String DENIED_IPS = "deniedIps";@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {String clientIp=exchange.getRequest().getRemoteAddress().getAddress().getHostAddress();log.info("获取到的ip:============:{}",clientIp);String responseBody = "{\"error\": \"Custom error message\"}";if(!"1111111".equals(clientIp)){exchange.getResponse().setStatusCode(HttpStatus.BAD_REQUEST);exchange.getResponse().getHeaders().add("Content-Type", "application/json");return exchange.getResponse().writeWith(Mono.just(exchange.getResponse().bufferFactory().wrap(responseBody.getBytes())));}return chain.filter(exchange);}@Overridepublic int getOrder() {return 0;}
}

gateway配置断路器

导包

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId></dependency><dependency><groupId>io.github.resilience4j</groupId><artifactId>resilience4j-feign</artifactId></dependency><dependency><groupId>io.github.resilience4j</groupId><artifactId>resilience4j-reactor</artifactId></dependency>

配置

spring:cloud: gateway:discovery:locator:lower-case-service-id: trueenabled: truedefault-filters:- name: CircuitBreakerargs:name: myCircuitBreakerfallbackUri: forward:/fallbackroutes:- id: fee-serviceuri: lb://fee-servicepredicates:- Path=/queryfilters:- name: CircuitBreakerargs:name: myCircuitBreakerfallbackUri: forward:/fallback//断路器配置resilience4j:circuitbreaker:instances:myCircuitBreaker:slidingWindowSize: 10failureRateThreshold: 50minimumNumberOfCalls: 5waitDurationInOpenState: 10s

兜底接口

@RestController
@Slf4j
public class GateController {@Autowiredprivate FeginClients feginClients;@GetMapping("/fallback")public Wrapper query(){log.info("test:================");return WrapperMapper.error();}
}
关键字:辽宁建设工程信息网抚顺_河北建筑工程学院招生信息网_北京seo推广优化_苏州seo关键词优化排名

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: