练SpringCloud第三篇:Spring Cloud Gateway

在这里插入图片描述
学习Spring Cloud Gateway之前,先了解清楚什么事API Gateway。API Gateway本身也是一种服务,它负责将外部的请求路由到其他内部服务,客户端不必再关心各种复杂的服务,不需要再在客户端进行各种API组合。例如,订单详情,它可能不仅需要从订单服务获取信息,也可能需要从配送服务请求需要的数据。那么客户端需要请求这两个服务查询信息,需要知道两个服务的请求地址。服务发生变动,客户端也要进行修改。如果服务越来越多,客户端需要维护更多的信息。有了API Gateway就能很好的解决这个问题。

一、准备工作

假设现在有两个服务,分别是demo-provider-hellodemo-provider-say,现需要通过Gateway服务配置路由以及其他边缘功能(身份验证、访问授权、速率限制、缓存、指标收集、请求日志等)。这两个服务的bootstrap.yml配置如下:

  • demo-provider-hello
server:
  port: 8081
  servlet:
    context-path: /h
spring:
  application:
    name: demo-provider-hello
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml

提供了服务接口:

@RestController
public class HelloController {

    @GetMapping("hello")
    public String hello() {
        return "Hello world!";
    }
}
  • demo-provider-say
server:
  port: 8082
  servlet:
    context-path: /s
spring:
  application:
    name: demo-provider-say
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml

提供了服务接口:

@RestController
public class SayController {

    @GetMapping("say")
    public String say() {
        return "I'm Mr Chou!";
    }
}

二、创建API Gateway服务

1. 在IDE中创建demo-gateway模块:

在这里插入图片描述

2. 添加依赖

		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2021.0.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
            <version>3.1.1</version>
        </dependency>
		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
            <version>3.1.1</version>
        </dependency>
        <!-- Gateway需要负载到其他服务,所以必须添加 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
            <version>3.1.1</version>
        </dependency>

3. 开始配置路由

在bootstrap.yml中进行如下配置:

server:
  port: 8888
spring:
  application:
    name: demo-gateway
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
        - id: hello # 保证唯一
          uri: lb://demo-provider-hello # 要路由的服务,lb://后为服务名称
          predicates: # 断言规则
            - Path=/h/** # 匹配请求路径为/first开头的url
            - Method=GET # 匹配请求方法为GET

        - id: say
          uri: lb://demo-provider-say
          predicates:
            - Path=/s/**
            - Method=GET
  • id:为路由唯一标识
  • uri:要路由的服务,lb://表示启用负载均衡,否则直接配置http://[host]:[port]即可
  • predicates:断言规则,主要是为了匹配请求,如果断言规则全部匹配,则会被路由到该服务。
    常用的断言还有其他的,如:Before、After、Between、Cookie、Header等。

4. 开始运行

启动三个服务:
在这里插入图片描述

  • 通过gateway服务访问hello接口:
    在这里插入图片描述
  • 通过gateway服务访问say接口:
    在这里插入图片描述
    路由配置成功。
    在这里插入图片描述

三、结语

上面说了动态路由的断言,没有提到过滤器,其实学会了断言,过滤器配置起来也很简单。在工作使用时,根据业务需求进行配置。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值