【SpringCloud教程】4.SpringCloud Gateway常用配置和整合Loadbalancer

上篇讲到了SpringCloud Gateway的简单使用,实现转发功能。本章主要讲到常用配置以及整合Loadbalancer。

常用配置

Gateway 基本配置route(路由)构成如下:

id:保证路由唯一;

uri:配置跳转路径,可以是具体的http资源路径、也可以是服务名。如lb://user/,lb是loadbalancer缩写,user是服务名,通过这段配置实现服务的负载均衡,这一点类似Nginxupstream

predicate:配置规则,官网配置如下:

【SpringCloud教程】4.SpringCloud Gateway常用配置和整合Loadbalancer_第1张图片

filters:给下游配置请求头、响应头等。

参考SpringCloud Gateway 官网:https://docs.spring.io/spring-cloud-gateway/docs/3.0.6/reference/html/

整合Loadbalancer

服务注册者准备

准备一个服务注册者项目,如果不知道搭建可参考往期博客 Nacos服务消费和负载均衡,本文使用 user-api服务 分别占用9001、9002端口。

本地IDEA通过如下配置,同一项目占用两个端口:

【SpringCloud教程】4.SpringCloud Gateway常用配置和整合Loadbalancer_第2张图片

测试控制层,获取服务端口号:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserCtrl {

    @Value("${server.port}")
    private String port;

    @GetMapping("getUser")
    public String getUser(){
        return "terry: " + port;
    }
}

启动项目,在Nacos管理页看到实例数为2:

【SpringCloud教程】4.SpringCloud Gateway常用配置和整合Loadbalancer_第3张图片

Gateway项目

pom.xml配置如下:


    <dependencies>
        
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
        dependency>
        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-gatewayartifactId>
        dependency>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webfluxartifactId>
        dependency>
        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-loadbalancerartifactId>
        dependency>
    dependencies>
    <dependencyManagement>
        <dependencies>
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-parentartifactId>
                <version>2.4.2version>
            dependency>
            
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-dependenciesartifactId>
                <version>2020.0.5version>
                <type>pomtype>
                <scope>importscope>
            dependency>
            
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-alibaba-dependenciesartifactId>
                <version>2021.1version>
                <type>pomtype>
                <scope>importscope>
            dependency>
        dependencies>
    dependencyManagement>

yml配置如下:

server:
  port: 8080

spring:
  application:
    name: gateway
  cloud:
    # nacos 配置中心
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
    gateway:
      discovery:
        locator:
          #### 开启以服务id去注册中心上获取转发地址
          enabled: true
      # 配置路由
      routes:
        # id 保证唯一
        - id: csdn
          # 配置跳转路径(这里以我的博客首页为例)
          uri: https://blog.csdn.net/qq_37493888/
          # 路由条件
          predicates:
            - Path=/csdn/**
        - id: user
          # 配置跳转路径(这里以我的博客首页为例)
          uri: lb://user-api
          # 路由条件
          predicates:
            - Path=/user/**
          filters:
            - StripPrefix=1

访问:http://localhost:8080/user/getUser

terry:9001,terry:9002 交替执行,如下:

【SpringCloud教程】4.SpringCloud Gateway常用配置和整合Loadbalancer_第4张图片

【SpringCloud教程】4.SpringCloud Gateway常用配置和整合Loadbalancer_第5张图片

你可能感兴趣的:(SpringCloud,spring,cloud,gateway,java)