SpringCloud组件七之GateWay-网关(G版本)
一.GateWay简介Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关。网关作为流量的,在微服务系统中有着非常作用,网关常见的功能有路由转发、权限校验、限流控制等作用。Route(路由):这是网关的基本构建块。它由一个 ID,一个目标 URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配。Predicate(断言):这是一个...
·
一.GateWay简介
Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关。网关作为流量的,在微服务系统中有着非常作用,网关常见的功能有路由转发、权限校验、限流控制等作用。
- Route(路由):这是网关的基本构建块。它由一个 ID,一个目标 URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配。
- Predicate(断言):这是一个 Java 8 的 Predicate。输入类型是一个 ServerWebExchange。我们可以使用它来匹配来自 HTTP 请求的任何内容,例如 headers 或参数。
- Filter(过滤器):这是org.springframework.cloud.gateway.filter.GatewayFilter的实例,我们可以使用它修改请求和响应。
二.项目现状
- 具有两个微服务,一个是注册中心(registry),另一个是服务提供者(provider)
- 服务提供者 - provider
- 项目配置细节
server:
port: 8081
spring:
application:
name: server-provider
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10010/eureka
- 微服务提供的两个接口
@RestController
public class TsetController {
@GetMapping("hello")
public String hello(){
return "Hello,我是provider";
}
@GetMapping("hi")
public String hi(){
return "hi,我是provider";
}
}
- 项目情况
三.项目构建-gateway
- POM文件
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
- 项目配置
server:
port: 8088
spring:
application:
name: gateway-server
cloud:
gateway:
discovery:
locator:
enabled: true
#是否与服务注册于发现组件进行结合,
#设为true便开启通过服务中心的自动根据 serviceId 创建路由的功能。
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10010/eureka
四.运行项目
- 服务注册完成
- 访问provider项目
http://127.0.0.1:8081/hello,没问题
Hello,我是provider
- 访问gateway项目
http://127.0.0.1:8088/SERVER-PROVIDER/hi
hi,我是provider
- 问题一:服务名需要大写才访问,是否可以通过小写服务名访问
添加配置:spring.cloud.gateway.discovery.locator.lowerCaseServiceId:true即可
spring:
application:
name: gateway-server
cloud:
gateway:
discovery:
locator:
enabled: true #是否与服务注册于发现组件进行结合,设为true便开启通过服务中心的自动根据 serviceId 创建路由的功能。
lowerCaseServiceId: true #该配置开启后,服务名可以小写
- 访问gateway项目-小写服务名
http://127.0.0.1:8088/server-provider/hi
hi,我是provider
- 问题二:是否可以自定义路由
routes:
- id: provider-routes #路由名称:不重复即可
uri: lb://SERVER-PROVIDER #lb:从eureka中获取服务
predicates: #谓语:url包含provider
- Path=/provider/**
filters: #过滤器:过滤器从第一个之后开始截取
- StripPrefix=1
- 完成配置
spring:
application:
name: gateway-server
cloud:
gateway:
discovery:
locator:
enabled: true #是否与服务注册于发现组件进行结合,设为true便开启通过服务中心的自动根据 serviceId 创建路由的功能。
lowerCaseServiceId: true #该配置开启后,服务名可以小写
routes:
- id: provider-routes
uri: lb://SERVER-PROVIDER #lb:从eureka中获取服务
predicates:
- Path=/provider/**
filters:
- StripPrefix=1
- 访问provider项目的/hi接口
- 以上为GateWay的路由简单配置,还可以配置内置predicates,filters,具体参考Spring Cloud GateWay官方文档。
GitHub项目地址:https://github.com/oldgarlic/spring-cloud
更多推荐
已为社区贡献2条内容
所有评论(0)