spring-cloud-gateway(进阶)整合nacos动态路由

目录

1.搭建环境

1.1安装nacos

2.创建项目

2.1创建父项目

2.2创建 gateway 项目

2.3创建服务

2.4测试服务连通性


1.搭建环境

1.1安装nacos

官网下载nacos-server-xxx.tar.gz包,我这里下载的2.2.3版本,tar -xzvf解压,单机命令sh startup.sh -m standalone启动

查看log tail -100f /xxx/nacos/logs/start.out

 看到这样的日志就是启动成功了。

如果报jdk不匹配,需要使用1.8的jdk启动,可以修改startup.sh,指定export JAVA_HOME=/usr/local/jdk1.8.0_131/ 环境

访问 http://localhost:8848就可以看到nacos页面了

2.创建项目

2.1创建父项目

创建maven项目,创建parent的pom文件,引入nacos

<?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 https://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.7.14</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.test</groupId>
    <artifactId>boot-cloud</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <!--标记项目只是pom文件-->
    <packaging>pom</packaging>
    <properties>
        <!--指定包版本-->
        <java.version>1.8</java.version>
        <spring-cloud.version>2021.0.8</spring-cloud.version>
        <spring-boot.version>2.7.14</spring-boot.version>
        <spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
    </properties>
    <dependencyManagement><!--只管理,不导入-->
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-webflux</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--nacos-->
            <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>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>
2.2创建 gateway 项目

选择spring Initializr->选择1.8sdk->下一步

下一步直接完成就好,然后修改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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.test</groupId>
        <artifactId>boot-cloud</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <artifactId>boot_gateway</artifactId>
    <name>boot_gateway</name>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <!--增加nacos后必须增加这个导包,动态路由都是基于此实现,不导访问无报错,只是转发不过去,报503-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
        </dependency>
        <!--nacos 服务发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

然后修改配置文件application.properties为application.yaml,增加配置

server:
  port: 8010
spring:
  application:
    name: gateway
  cloud:
    nacos:
      discovery:
        server-addr: ip:8848
#       username:
#       password:
    gateway:
      routes:
#      routes:
#       #id和uri命名不要带_,否则会报错
#        - id: boot-test
#          uri: lb://boot-test
#          predicates:
#            - Path=/boot-test/**
#          filters:
#            # 转发请求时去掉1级前缀,eg:http://localhost:8010/boot-test/test/t中间的boot-test字段会被清掉
#            - StripPrefix=1
      #上面这些都可以去掉了,因为走nacos动态路由
      discovery:
        # 路由访问方式:http://Gateway_HOST:Gateway_PORT/serviceId/**,其中微服务应用名默认大写访问
        locator:
          # 是否与服务发现组件进行结合,通过 serviceId(必须设置成大写) 转发到具体的服务实例。默认为false,设为true便开启通过服务中心的自动根据 serviceId 创建路由的功能。
          enabled: true
          # 允许通过模块名小写代理
          lower-case-service-id: true

给启动类增加服务发现的注解@EnableDiscoveryClient

package com.test.boot_gateway;

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

@SpringBootApplication
@EnableDiscoveryClient
public class BootGatewayApplication {

    public static void main(String[] args) {
        SpringApplication.run(BootGatewayApplication.class, args);
    }

}
2.3创建服务

创建一个服务项目部署两台来做测试

按照上面gateway的方法创建项目,修改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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.test</groupId>
        <artifactId>boot-cloud</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <artifactId>boot_test</artifactId>
    <name>boot_test</name>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

配置文件增加端口号和nacos配置

server.port=8030
#这个命名不要有_,否则nacos会报错
spring.application.name=boot-test
spring.cloud.nacos.discovery.server-addr=ip:8848

同样,启动类上增加@EnableDiscoveryClient

package com.test.boot_test;

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

@SpringBootApplication
@EnableDiscoveryClient
public class BootTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(BootTestApplication.class, args);
    }

}

创建测试类:

@RestController
@RequestMapping("/test")
public class Test {

    @GetMapping("/t")
    public String test(){
        return "测试1";
    }
}
2.4测试服务连通性

启动gateway项目

启动test项目

修改test端口号,再启动一台

访问http://ip:8848/nacos/index.html#/,查看服务注册情况

看到如图,则服务均已注册到nacos

访问http://localhost:8010/boot-test/test/t,结果会在“测试1”和“测试2”来回切换,说明gateway负载均衡,且可以正常转发,如图

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值