Spring cloud gateway整合nacos示例

Sprint Cloud gateway 作为一个业务网关,主要作用聚合内部微服务调用请求,实现前端vue或app对api请求统一调用,前身是zuul现为gateway

创建 Spring cloud gateway项目

gradle -v 查看gradle版本号

------------------------------------------------------------
Gradle 7.1.1
------------------------------------------------------------

Build time:   2021-07-02 12:16:43 UTC
Revision:     774525a055494e0ece39f522ac7ad17498ce032c

Kotlin:       1.4.31
Groovy:       3.0.7
Ant:          Apache Ant(TM) version 1.10.9 compiled on September 27 2020
JVM:          11.0.7 (Oracle Corporation 11.0.7+8-LTS)
OS:           Windows 10 10.0 amd64

出现上述表示安装成功

创建工程

F:Tools	est>gradle init
Starting a Gradle Daemon, 1 incompatible and 1 stopped Daemons could not be reused, use --status for details

Select type of project to generate:
  1: basic
  2: application
  3: library
  4: Gradle plugin
Enter selection (default: basic) [1..4]

选择basic 默认就可以

生成后工程目录导入idea

可能需要手工创建一些目录

src/main/java

src/main/resources

src/test/java

src/test/resouces

修改build.gradle 内容如下

plugins {
    id org.springframework.boot version 2.5.3
    id io.spring.dependency-management version 1.0.11.RELEASE
    id java
}

group com.rainbow
version 1.0-SNAPSHOT
sourceCompatibility = 11

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}
repositories {
    mavenCentral()
}

ext {
    set(springCloudVersion, "2020.0.3")
}

dependencies {


    implementation org.springframework.cloud:spring-cloud-starter-gateway
    implementation group: com.alibaba.cloud, name: spring-cloud-starter-alibaba-nacos-discovery, version: 2021.1
    testImplementation org.springframework.boot:spring-boot-starter-test
    implementation group: org.springframework.cloud, name: spring-cloud-loadbalancer, version: 3.0.3
}


dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

Reload all 一下加载依赖包需要等待时间

编写启动类

@SpringBootApplication
@EnableDiscoveryClient
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

编写application.yml

server:
  port: 8080
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 10.0.0.192:8848
        namespace: 5fa2f06b-1959-4b32-9060-81e49e54dfdd
        group: dev
    gateway:
      routes:
        - id: users
          uri: lb://users
          predicates:
            - Path=/users/**
          filters:
            - StripPrefix=1

配置说明:

如果lb://users 生效必需要引用

implementation group: org.springframework.cloud, name: spring-cloud-loadbalancer, version: 3.0.3

否则出现404 无任何提示

微服务users 代码示例

@RestController
@Slf4j
public class HelloController {

    @GetMapping("/hello")
    public String hello(){
        log.info("hello");

        return "Hello2222222";
    }
}

启动项目测试:

GET http://127.0.0.1:8080/users/hello 返回如下所示:

调整配置文件 通过服务发现自动路由

server:
  port: 8080
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 10.0.0.192:8848
        namespace: 5fa2f06b-1959-4b32-9060-81e49e54dfdd
        group: dev
    gateway:
      discovery:
        locator:
          enabled: true
          lower-case-service-id: true

根据服务自动发现根据默认调用原则 http://127.0.0.1:8080/{服务名}/{微服务路径}

http://127.0.0.1:8080/users/hello

nacos服务注册

经验分享 程序员 微信小程序 职场和发展