gateway

阅读: 评论:0

gateway

gateway

spring-cloud-gateway文档

Gateway相关配置

  • yml配置路由级别的断言和过滤器
  • 配置全局过滤器
  • 解决跨域访问
    • java程序的方式
    • yml的方式
  • 整合sentinel-自定义降级异常
    • java程序的方式
    • yml的方式

添加VM Option开始日志信息
-Dreactorty.http.server.accessLogEnabled=true
引入依赖

<dependencies><!--服务注册与发现--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--负载均衡--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency><!--gateway依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>
</dependencies>

yml配置路由级别的断言和过滤器

配置网关
上面 引入的 负载均衡 依赖,主要是为了配置下面文件的时候设置路由的uri只需要使用服务名,不需要通过ip+port的形式去路由。

uri: lb://服务名

server:port: 8080
spring:application:name: gatewaycloud:
#    注册服务nacos:server-addr: 127.0.0.1:8848username: nacospassword: nacosgateway:routes:- id: order-routeuri: lb://order-servicepredicates:- Path=/order-service/**   #断言,只有以order-service前缀开头的才会匹配filters:- StripPrefix=1                # 去一个前缀, 原请求:localhost:8080/order-service/order#           新请求:order-service/order   更换ip和端口去前缀
#            - PrefixPath=/order-service   # 加前缀- AddRequestHeader=X-Request-color,white # 添加请求头

配置 自定义GatewayFilter 过滤器 继承AbstractNameValueGatewayFilterFactory
抽象类

配置全局过滤器

实现 GlobalFilter, Ordered 接口

@Component
public class LoginAuthFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {System.out.Request().getPath().value());if ("/order/login".Request().getPath().value())) {// 放行return chain.filter(exchange);}List<String> list = Request().getHeaders().get("Authorization");if (list == null || list.isEmpty()) {// 没有Response().setStatusCode(HttpStatus.UNAUTHORIZED);Response().setComplete();}String token = (0);if (!"wuyu".equals(token)) {// token不正确Response().setStatusCode(HttpStatus.UNAUTHORIZED);Response().setComplete();}// token正确return chain.filter(exchange);}@Overridepublic int getOrder() {return 0;}
}

解决跨域访问

java程序的方式

@Configuration
public class CorsConfig{@Beanpublic CorsWebFilter corsWebFilter(){CorsConfiguration configuration=new CorsConfiguration();configuration.addAllowedHeader("*");configuration.addAllowedMethod("*");configuration.addAllowedOrigin("*");UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());isterCorsConfiguration("/**",configuration);return new CorsWebFilter(source);}
}

yml的方式

spring:cloud:gateway:globalcors:cors-configurations:'[/**]':allowedOrigins: "*"allowedMethods:- GET- POST- DELETE- PUT- OPTION

整合sentinel-自定义降级异常

官网地址

  1. 启动sentinel服务器 :sentinel的配置参考这里
  2. 引入依赖
 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId></dependency>
  1. 先访问gateway的服务接口,使资源注册到sentinel上,然后在访问启动的sentinel服务,进行流控降级的配置。

java程序的方式

@Configuration
public class GatewayConfig{@PostConstructpublic void init(){BlockRequestHandler blockRequestHandler = new BlockRequestHandler() {@Overridepublic Mono<ServerResponse> handleRequest(ServerWebExchange serverWebExchange, Throwable throwable) {if (throwable instanceof ParamFlowException paramFlowException){return ServerResponse.status(HttpStatus.OK).contentType(MediaType.APPLICATION_JSON).bodyValue("{"message":"流控了----java"}");}return ServerResponse.status(HttpStatus.OK).contentType(MediaType.APPLICATION_JSON).bodyValue("{"message":"降级了----java"}");}};GatewayCallbackManager.setBlockHandler(blockRequestHandler);}
}

yml的方式

server:port: 8080
spring:application:name: gatewaycloud:sentinel:scg:fallback:mode: responsecontent-type: application/jsonresponse-status: 429response-body: "{"code":429,"message":"降级了---yml"}"

本文发布于:2024-01-27 23:51:59,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17063707303395.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:gateway
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23