Gateway新一代网关
程序员文章站
2022-06-13 13:49:32
...
1、Spring Cloud Gateway 使用的Webflux中的reactor-netty响应式编程组件,底层使用了Netty通讯框架
2、能干嘛?
- 反向代理
- 鉴权
- 流量控制
- 熔断
- 日志监控
3、三大核心概念
1、pom文件
<!--新增gateway-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
2、yml文件
server:
port: 9527
spring:
application:
name: cloud-gateway
cloud:
gateway:
routes:
- id: payment_routh
# uri: http://localhost:8001
uri: lb://cloud-payment-service # 匹配提供服务的路由地址
predicates:
- Path=/payment/get/**
- id: payment_routh2
# uri: http://localhost:8001
uri: lb://cloud-payment-service
predicates:
- Path=/payment/lb/**
discovery:
locator:
enabled: true # 开启从注册中心动态创建路由的功能,利用微服务名进行路由
eureka:
instance:
hostname: cloud-gateway-service
client:
service-url:
register-with-eureka: true
fetch-registry: true
defaultZone: http://eureka7001.com:7001/eureka
3、主启动类
@SpringBootApplication
@EnableEurekaClient
public class GateWayMain9527 {
public static void main(String[] args) {
SpringApplication.run(GateWayMain9527.class, args);
}
}
4、测试
可以看到,我们通过9527端口就能访问名称为 cloud-payment-service下面的接口服务!!!
- 默认情况下Gateway会根据注册中心的服务列表,以注册中心上微服务名为路径创建动态路由进行转发,从而实现动态路由的功能
- lb指代的是uri的协议为lb,表示启用Gateway的负载均衡功能
- lb://serviceName是spring cloud gateway在微服务中自动为我们创建的负载均衡uri
如果想在配置中添加一些其他的校验方式:
如果除了上面的之外,还有其他的想要实现的,可以自己定义类实现impiemerts GlobalFilter ,Ordered:
@Component
@Slf4j
public class MyLogGateWayFilter implements GlobalFilter,Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String username = exchange.getRequest().getQueryParams().getFirst("username");
if(StringUtils.isEmpty(username)){
// log.info("*****用户名为Null 非法用户,(┬_┬)");
exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
//给人家一个回应
return exchange.getResponse().setComplete();
}
return chain.filter(exchange);
}
@Override
public int getOrder() {
return 0;
}
}
看上面,如果请求中没有username参数的话,就会报错,从而实现了统一网关鉴权。
测试如下:
不加username:
加了username:
推荐阅读
-
百度杀毒5.0正式发布:新一代雪狼引擎 全面根除病毒残留痕迹
-
Spring Cloud Gateway转发Spring WebSocket
-
新一代iphone何时发布(苹果12与苹果11的区别)
-
Soul Api网关功能需求技术选型分析
-
新一代iphone何时发布(苹果12与苹果11的区别)
-
Soul Api网关功能需求技术选型分析
-
SAP云平台部署应用时遇到的502 Updating service failed - Bad Gateway SAP成都研究院SAP Cloud PlatformSAP云平台SAPABAP
-
KONG网关 — 插件开发
-
网关kong自定义的插件开发攻略
-
gateway客æ·ç«¯è天