快速搭建一个SpringGateway网关

☝️搭建脚手架

我们可以去 Spring initializer 网站或者用 IDEA 来快速创建出一个 Spring Cloud Gateway 项目。

这里我们选择的注册中心是 Zookeeper,你也可以自己选择其他的注册中心来注册你的项目,比如阿里巴巴的 Nacos 等。

%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E7%BD%91%E5%85%B3%E9%A1%B9%E7%9B%AE%20f074aa733bd04ab885cacd0c71d9f94c/Untitled.png

配置完相关信息后,点击下面的 GENERATE 按钮就可以导出项目的 zip 压缩包,解压后用 IDE 打开。

打开后就是这个样子:

%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E7%BD%91%E5%85%B3%E9%A1%B9%E7%9B%AE%20f074aa733bd04ab885cacd0c71d9f94c/Untitled%201.png

✌️配置路由

Ymal 方式配置

为了方便配置,我们把 application.properties 改成 application.yml

然后配置一个转发到百度到路由。

spring:
  cloud:
    gateway:
      routes:
        - id: route-demo
          uri: https://baidu.com
          predicates:
            - Path=/**

在配置中,我加来一个谓词 Path ,表示所有当请求都会匹配到这个路由下,然后转发到 uri 配置到网址里。所以当我们打开浏览器访问 [http://localhost:8080/](http://localhost:8080/) 是就会自动跳转到百度到首页。

Java 代码方式配置

除了用配置文件配置路由外,我们还可以用代码的方式来配置路由。

下面来展示一下代码方式配置的路由:

@Bean
public RouteLocator routesConfig(RouteLocatorBuilder builder){
	return builder.routes()
			.route("route-demo",r -> r.path("/**").uri("https://baidu.com"))
			.build();
}

这几行代码实现的是和上面配置一样的功能,当访问 [http://localhost:8080/](http://localhost:8080/) 时也会跳转到百度首页。

👌注册到 Zookeeper

接下来演示一下如何把网关注册到 Zookeeper。

首先在我们本地搭建好 Zookeeper,我这边是直接用 Docker 启动了一个 Zookeeper。

然后在配置文件添加如下配置:

spring:
  application:
    name: weidain-gateway
  cloud:
    zookeeper:
      connect-string: localhost:2181

上面到 weidain-gateway 是我们注册到 Zookeeper 上到服务名,地址 [localhost:2181](http://localhost:2181) 是我们本地 Zookeeper 注册中心到地址。

启动项目后,我们用 Zookeeper 可视化工具就可以看到注册中心多了一个 services 节点,节点下面有我们注册上去的 weidain-gateway 服务

%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E7%BD%91%E5%85%B3%E9%A1%B9%E7%9B%AE%20f074aa733bd04ab885cacd0c71d9f94c/Untitled%202.png

下面就是我们网关服务注册到 Zookeeper 到数据:

{
    "name": "weidain-gateway",
    "id": "8c802a81-12e7-4f72-9034-aee00c0745bb",
    "address": "169.254.238.114",
    "port": 8080,
    "sslPort": null,
    "payload": {
        "@class": "org.springframework.cloud.zookeeper.discovery.ZookeeperInstance",
        "id": "application-1",
        "name": "weidain-gateway",
        "metadata": {
            "instance_status": "UP"
        }
    },
    "registrationTimeUTC": 1620118042689,
    "serviceType": "DYNAMIC",
    "uriSpec": {
        "parts": [
            {
                "value": "scheme",
                "variable": true
            },
            {
                "value": "://",
                "variable": false
            },
            {
                "value": "address",
                "variable": true
            },
            {
                "value": ":",
                "variable": false
            },
            {
                "value": "port",
                "variable": true
            }
        ]
    }
}