实战四:Gateway网关作全局路由转发

Gateway网关的作用主要是两个:路由转发,请求过滤。此篇讲的是路由转发,下篇介绍请求过滤。

一,创建网关module,添加依赖

  1,new -> module -> maven 或直接 spring initializr:如果是通过spring initializr,请不要选择web组件,因为Gateway是通过webflux开发,与web组件冲突。同样的,parent选择之前创建的父工程,统一管理版本号。

  2,修改pom文件,添加依赖,不需要依赖common

  注:spring-cloud-starter-gateway中包含了spring-cloud-starter,其中又包括了spring-boot-starter
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

  注:Gateway需要从注册中心获取服务信息,所以此处要加服务注册与发现组件 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>

 

二,通过配置文件配置路由转发规则

server:
  port: 9090
spring:
  cloud:
  # 服务注册中心配置 nacos: server-addr: localhost:8848 discovery: server-addr: ${spring.cloud.nacos.server-addr}
  #网关配置,可以配置多条路由转发规则
  gateway:
routes:
- id: user
uri: lb://user
predicates:
- Path=/user/**
discovery: #开启服务发现实现负载均衡
locator:
enabled: true
application: name: gateway

以上配置会将地址中带有user的url转发到注册中心中的user服务,lb://是负载均衡的意思,即这种方式已经启用了负载均衡。

predicates是转发规则,是一个数组,多条记录时须各项规则都通过才能匹配。predicates的操作有很多,可以在官网查看。

三,通过java代码方式配置路由转发规则

@Configuration
public class GatewayConfig {
    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
                .route("user_route", r -> r.path("/user/**").uri("lb://user")).build();
    }
}

 

posted @ 2020-09-03 11:36  王东波  阅读(452)  评论(0编辑  收藏  举报