Gateway组件使用
什么是服务网关
1.说明
- 网关统一服务入口,可方便实现对平台众多服务接口进行管控,对访问服务的身份认证、防报文重放于数据篡改、功能调用的业务
鉴权、响应数据的脱敏、流量与并发控制,甚至基于API调用的计量或者计费等等 - 网关 = 路由转发 + 过滤器
路由转发:接收一切外界请求,转发到后端的微服务上去
在服务网关中可以完成一系列的横切功能,例如权限校验、限流以及控制等,这些都可以通过过滤器完成
2.为什么需要网关 - 网关可以实现服务的统一管理
- 网关可以解决微服务中通用代码的冗余问题(如权限控制、流量监控、限流等)—>负载均衡
gateway(spring)
1.gateway简介:这个项目提供了一个在springmvc之上构建API网关的库。springcloudgateway旨在提供一种简单有效的方法来路由到api,
并为api提供横切关注点,比如:安全性、监控/度量和弹性
2.特性
- 基于springboot2.x 和 spring webFlux 和 Reactor 构建 响应式异步非阻塞 IO 模型
- 动态路由
- 请求过滤
开发网关动态路由
- 1.网关配置有两种方式一种式快捷方式(Java代码编写网关),一种式完全展开方式(配置文件方式)【推荐】
- 2.gateway组件也需要注册在consul注册中心,所以创建springboot项目需要引入consul依赖、actuator健康检测依赖、gateway网关依赖*【由于gateway依赖中有web相关依赖,所以不用引入web依赖了,不然会报错】*
- 3.创建项目引入网关依赖
<!-- 网关依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
- 4.快捷方式配置路由 (两种方式)
a.使用application.xml文档编写网关配置
server:
port: 7979
spring:
application:
name: CATEWAY
cloud:
consul:
host: localhost
port: 8500
gateway:
routes:
- id: student_route #指定路由唯一标识
uri: http://localhost:8086 #指定路由服务的地址
predicates:
- Path=/student/**
- id: school_route #指定路由唯一标识
uri: http://localhost:8087 #指定路由服务的地址
predicates:
- Path=/school/student/**
b.使用java方式配置路由
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder) {
RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();
return routes.route("path_route1", r -> r.path("/guonei")
.uri("https://news.baidu.com/guonei"))
.build();
}
- 5.启动类中注解
@SpringBootApplication
@EnableDiscoveryClient //consul
public class GatewayApplication {...}
网关在路由转发时如何实现请求负载均衡
- 1.现有网关配置存在问题?
server:
port: 7979
spring:
application:
name: CATEWAY
cloud:
consul:
host: localhost
port: 8500
gateway:
routes:
- id: student_route #指定路由唯一标识
uri: http://localhost:8086 #指定路由服务的地址
predicates:
- Path=/student/**
问题:现有网关配置方式在uri的属性中路径直接写死为服务的某一个节点,这样没有办法实现请求的负载均衡
- 2.如何配置网关转发实现负载均衡
gateway:
routes:
- id: student_route #指定路由唯一标识
uri: lb://STUDENT #实现请求的负载均衡处理
predicates:
- Path=/student/**
使用uri: lb://STUDENT #实现请求的负载均衡处理【注意:lb是load balance负载均衡 ,STUDENT是服务id】