gateway网关实现路由基于nacos注册中心

      首先你需要启动nacos服务,才能开始下面的效果

image

 

image

 

image

 这里10010为网关端口

nacos你需要

image

当服务都启动后,你应该看到如下服务

image

 好了,下面开始上代码了

首先是网关部分

下面是网关的pom文件

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.13</version>
        <relativePath/>
    </parent>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>2021.0.4</spring-cloud.version>
        <spring-cloud-alibaba.version>2021.0.4.0</spring-cloud-alibaba.version>
    </properties>

    <groupId>com.huting</groupId>
    <artifactId>gateway-service</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencyManagement>
        <dependencies>
            <!-- Spring Cloud -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- Alibaba Cloud -->
            <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>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
        <!-- Gateway 网关 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
        <!-- Nacos 服务发现 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

</project>

  网关的启动类

package com.gate;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * @Description:
 * @Author: qiuxie
 * @Create: 2025/11/12 21:05
 */
@EnableDiscoveryClient
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

  网关的配置文件

application.properties

server.port=10010

#spring.config.import=optional:nacos:${spring.application.name}.properties

spring.application.name=gateway-service
spring.cloud.nacos.discovery.server-addr=192.168.31.60:8850
spring.cloud.nacos.discovery.service=${spring.application.name}
spring.cloud.nacos.discovery.namespace=gateway-test
management.endpoints.web.exposure.include=*


spring.cloud.gateway.routes[0].id=user-service
spring.cloud.gateway.routes[0].uri=lb://user-service
spring.cloud.gateway.routes[0].predicates[0].name=Path
spring.cloud.gateway.routes[0].predicates[0].args[pattern]=/user/**

spring.cloud.gateway.routes[1].id=login-route
spring.cloud.gateway.routes[1].uri=lb://user-service
spring.cloud.gateway.routes[1].predicates[0].name=Path
spring.cloud.gateway.routes[1].predicates[0].args[pattern]=/login/**

spring.cloud.gateway.routes[2].id=order-service
spring.cloud.gateway.routes[2].uri=lb://order-service
spring.cloud.gateway.routes[2].predicates[0].name=Path
spring.cloud.gateway.routes[2].predicates[0].args[pattern]=/order/**

logging.level.org.springframework.cloud.gateway=DEBUG

#nacos配置
#2024.3.1 13:56 add
spring.cloud.nacos.config.server-addr=192.168.31.60:8850
spring.cloud.nacos.config.namespace=gateway-test
spring.cloud.nacos.config.group=DEFAULT_GROUP
spring.cloud.nacos.config.file-extension=properties

logging.level.org.springframework.cloud.gateway.discovery=DEBUG

# 设置Nacos客户端日志级别为DEBUG
logging.level.com.alibaba.nacos=DEBUG

logging.level.com.java=debug
logging.level.com.alibaba.nacos.shaded.io.perfmark=info
logging.level.web=debug

 接下来是user-service服务的pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- 继承 Spring Boot 父 POM,管理 Spring Boot 依赖版本 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.18</version>
        <relativePath/> <!-- 从仓库查找父 POM -->
    </parent>

    <groupId>org.example</groupId>
    <artifactId>gateway-nacos-demo</artifactId>
    <version>1.0.0</version>
    <name>Gateway Nacos Demo</name>
    <description>Spring Boot + Gateway + Nacos 服务发现示例</description>

    <properties>
        <java.version>1.8</java.version>
        <skipTests>true</skipTests>
        <springcloud.version>2021.0.5</springcloud.version>
        <alibaba.version>2021.0.5.0</alibaba.version>
    </properties>

    <!-- 依赖管理 -->
    <dependencyManagement>
        <dependencies>
            <!--spring cloud依赖管理,引入了Spring Cloud的版本-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${springcloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--SCA -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--SCA -->
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <!-- Spring Boot 核心依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--tomcat容器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Nacos 服务发现 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- Spring Boot Maven 插件 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.7.15</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

  user-service服务的启动类

package com.eg;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * @Description:
 * @Author: qiuxie
 * @Create: 2025/11/12 21:28
 */
@EnableDiscoveryClient
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

  user-service服务的接口

package com.eg;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description:
 * @Author: qiuxie
 * @Create: 2025/11/15 0:03
 */
@RequestMapping("/login")
@RestController
public class LoginController {

    @GetMapping("/{id}")
    public String queryById(@PathVariable("id") Long id) {
        return "恭喜您成功进入登录系统~";
    }
}

  user-service服务的接口

package com.eg;

import org.springframework.web.bind.annotation.*;

/**
 * @Description:
 * @Author: qiuxie
 * @Create: 2025/11/12 21:45
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @GetMapping("/{id}")
    public String queryById(@PathVariable("id") Long id) {

        return "恭喜您成功进入用户系统~";
    }

}

  user-service服务的配置文件

server.port=10011

spring.config.import=optional:nacos:${spring.application.name}.properties

spring.application.name=user-service
spring.cloud.nacos.discovery.server-addr=192.168.31.60:8850
spring.cloud.nacos.discovery.service=${spring.application.name}
spring.cloud.nacos.discovery.namespace=gateway-test
management.endpoints.web.exposure.include=*

#nacos配置
#2024.3.1 13:56 add
spring.cloud.nacos.config.server-addr=192.168.31.60:8850
spring.cloud.nacos.config.namespace=gateway-test
spring.cloud.nacos.config.group=DEFAULT_GROUP
spring.cloud.nacos.config.file-extension=properties

# 设置Nacos客户端日志级别为DEBUG
logging.level.com.alibaba.nacos=DEBUG

logging.level.com.java=debug
logging.level.com.alibaba.nacos.shaded.io.perfmark=info
logging.level.web=debug

  接下来是order-service服务的pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.order</groupId>
    <artifactId>order-service</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <java.version>1.8</java.version>
        <skipTests>true</skipTests>
        <springcloud.version>2021.0.5</springcloud.version>
        <alibaba.version>2021.0.5.0</alibaba.version>
    </properties>

    <!-- 继承 Spring Boot 父 POM,管理 Spring Boot 依赖版本 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.18</version>
        <relativePath/> <!-- 从仓库查找父 POM -->
    </parent>

    <!-- 依赖管理 -->
    <dependencyManagement>
        <dependencies>
            <!--spring cloud依赖管理,引入了Spring Cloud的版本-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${springcloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--SCA -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--SCA -->
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <!-- Spring Boot 核心依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--tomcat容器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Nacos 服务发现 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- Spring Boot Maven 插件 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.7.15</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>


</project>

  order-service服务的启动类和接口

package com.order;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description:
 * @Author: qiuxie
 * @Create: 2025/11/14 15:32
 */
@RestController
@EnableDiscoveryClient
@SpringBootApplication
@RequestMapping("/order")
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class,args);

    }

    @GetMapping("/{id}")
    public String queryById(@PathVariable("id") Long id) {

        return "恭喜您成功进入订单系统~";
    }

    @GetMapping("/")
    public String get(){
        return null;
    }
}

  order-service服务的配置文件

server.port=10012

spring.config.import=optional:nacos:${spring.application.name}.properties

spring.application.name=order-service
spring.cloud.nacos.discovery.server-addr=192.168.31.60:8850
spring.cloud.nacos.discovery.service=${spring.application.name}
spring.cloud.nacos.discovery.namespace=gateway-test
management.endpoints.web.exposure.include=*

#nacos配置
#2024.3.1 13:56 add
spring.cloud.nacos.config.server-addr=192.168.31.60:8850
spring.cloud.nacos.config.namespace=gateway-test
spring.cloud.nacos.config.group=DEFAULT_GROUP
spring.cloud.nacos.config.file-extension=properties

# 设置Nacos客户端日志级别为DEBUG
logging.level.com.alibaba.nacos=DEBUG

logging.level.com.java=debug
logging.level.com.alibaba.nacos.shaded.io.perfmark=info
logging.level.web=debug

  代码完毕,需要注意的gateway并没有rabbin了,所以需要引入loadbalancer

posted @ 2025-11-15 01:27  板凳哲学家  阅读(7)  评论(0)    收藏  举报