Nacos集成Spring Cloud Gateway 基础使用

时间:2019-12-11
本文章向大家介绍Nacos集成Spring Cloud Gateway 基础使用,主要包括Nacos集成Spring Cloud Gateway 基础使用使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

项目结构

项目 端口 描述
nacos-provider
8000 服务
nacos-getway
8001 网关
nacos-provider项目
依赖
<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>0.2.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

启动类

package com.example.nacosprovider;

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

@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {

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

}

配置文件

server:
  port: 8000
spring:
  application:
    name: nacos-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

创建控制类ProviderController,http://localhost:8000/provider/helloProvider

package com.example.nacosprovider.controller;


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

@RestController
@RequestMapping("/provider")
public class ProviderController {

    @GetMapping("/helloProvider")
    public String helloProvider(){
        return "你好,我是服务提供者";
    }
}
nacos-getway项目: 在这里用的是yml配置文件的方法
依赖
<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>0.2.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
    </dependencies>

启动类

package com.example.nacosgetway;

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

@SpringBootApplication
@EnableDiscoveryClient
public class NacosGetwayApplication {

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

配置文件

server:
  port: 8001
spring:
  application:
    name: nacos-getway
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    gateway:
      discovery:
        locator:
          enabled: true
          lower-case-service-id: true
      routes:
      - id: nacos-getway-provider
        uri: lb://nacos-provider
        predicates:
        - Path=/provider/**
      - id: nacos-getway-consumer
        uri: lb://nacos-consumer
        predicates:
        - Path=/**
各字段含义如下:

id:我们自定义的路由 ID,保持唯一
uri:目标服务地址,以lb://开头(lb代表从注册中心获取服务)
predicates:路由条件,Predicate 接受一个输入参数,返回一个布尔值结果。
该接口包含多种默认方法来将 Predicate 组合成其他复杂的逻辑(比如:与,或,非)。
filters:过滤规则,本示例暂时没用。

启动测试

启动Nacos-server服务,nacos-provider服务以及nacos-getway服务

http://localhost:8000/provider/helloProvider

http://localhost:8001/provider/helloProvider

出现问题

1,nacos-getway服务启动不了

原因: 父工程的pom文件中引入了spring-boot-starter-web依赖

 因为spring cloud gateway是基于webflux的,如果非要web支持的话需要导入spring-boot-starter-webflux而不是spring-boot-start-web。

解决方法: 将父工程中的spring-boot-starter-web依赖去掉,在需要这个依赖的子工程中单独添加

2,访问网关地址http://localhost:8001/provider/helloProvider返回404

原因: getway配置写的不对,将routes写成了route

原文地址:https://www.cnblogs.com/cailijuan/p/12024570.html