Spring Cloud Gateway + Nacos + LoadBalancer实现企业级网关

1. Spring Cloud Gateway 整合Nacos、LoadBalancer 实现企业级网关

前置工作:

  1. 创建 SpringBoot 多模块项目
  2. 创建网关(gateway-service)、用户(user-service)模块
  3. 用户模块添加 Nacos discovery 支持以及 Spring Web,并配置 Nacos 连接信息

准备用户模块的 controller :

java 复制代码
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired  // 获取动态端口
    private ServletWebServerApplicationContext context; 

    @RequestMapping("/getname")
    public String getName() {
        return context.getWebServer().getPort() +
                "--UserService:name=java-"+
                new Random().nextInt(100);
    }
}

【实现步骤】

  1. 添加依赖
  • Gateway、Nacos、LoadBalancer
  1. 设置路由
  • 配置 Gateway 路由规则:(id、uri、predicates)
  • 设置 Nacos 注册中心地址

1.1 添加依赖

此处的依赖添加在 gateway-service 子模块中:

XML 复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <!--   高版本需要添加客户端负载均衡   -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    </dependency>
</dependencies>

如果依赖加载报错,可以先检查一下父模块

  1. 是否统一版本
  2. <dependencyManagement> 中是否有以下三个依赖
XML 复制代码
<!-- 统一版本 -->
<spring-cloud-alibaba.version>2022.0.0.0</spring-cloud-alibaba.version>
<spring-cloud.version>2022.0.0</spring-cloud.version>
XML 复制代码
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>${spring-cloud-alibaba.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

1.2 设置路由

在 gateway-service 中的配置文件中,去设置路由规则以及 Nacos 注册中心的地址,

XML 复制代码
spring:
  cloud:
    nacos: # 配置注册中心
      discovery:
        server-addr: localhost:8848
        username: nacos
        password: nacos
    gateway: # 配置网关
      routes:
        - id: userservice
          uri: lb://user-service-gateway   # loadbalancer
          predicates:
            - Path=/user/**, /userlog/**

server:
  port: 10086

做好以上两步后,可以复制一个user-service,同时启动两个服务,通过网关路由到服务上的时候,看看是否是默认的轮询负载均衡策略:

此时启动 gateway-service、两个 user-service,使用网关模块中配置的 10086 端口去访问服务时,就能看到轮询的负载均衡策略了。


相关推荐
装不满的克莱因瓶29 分钟前
【踩坑】IDEA提交Git .gitignore忽略文件不起作用
java·git·.gitignore·踩坑
都叫我大帅哥29 分钟前
Docker Swarm 部署方案
后端
都叫我大帅哥33 分钟前
在Swarm中部署Nacos并配置外部MySQL
后端
专注于大数据技术栈36 分钟前
java学习--Collection的迭代器
java·python·学习
想摆烂的不会研究的研究生8 小时前
每日八股——Redis(1)
数据库·经验分享·redis·后端·缓存
毕设源码-郭学长8 小时前
【开题答辩全过程】以 基于SpringBoot技术的美妆销售系统为例,包含答辩的问题和答案
java·spring boot·后端
梨落秋霜8 小时前
Python入门篇【文件处理】
android·java·python
N***H4868 小时前
springcloud springboot nacos版本对应
spring boot·spring·spring cloud
Java 码农8 小时前
RabbitMQ集群部署方案及配置指南03
java·python·rabbitmq
哈库纳玛塔塔8 小时前
放弃 MyBatis,拥抱新一代 Java 数据访问库
java·开发语言·数据库·mybatis·orm·dbvisitor