spring cloud gateway nacos 网关设置

前期准备:可参考上一篇,spring cloud nacos 服务提供、服务消费(Feign、RestTemplate)及Hystrix熔断设置

1、下载安装 Nacos 服务中心(下载地址 https://github.com/alibaba/nacos/releases)并启动 Nacos server(以Windows为例),下载后启动bin文件夹下“startup.cmd”,待出现“Nacos started successfully......”启动成功。

  2、编写服务提供者(provider) 

POM

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>

启动类

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

配置文件(application.yml)

server:
  port: 8083

spring:
  application:
    name: testprovider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

Controller

@RestController
@RequestMapping("provider/")
public class Test {
    //测试服务提供者接口
    @RequestMapping("user/{fid}")
    public String getUser(@PathVariable long fid)
    {
        return "showFuser:"+fid;
    }
}

 

网关开始:

相关术语:

  • Route(路由):网关的基本构建块。由一个 ID,一个目标 URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配。

  • Predicate(断言):这是一个 Java 8 的 Predicate。输入类型是一个 ServerWebExchange。我们可以使用它来匹配来自 HTTP 请求的任何内容,例如 headers 或参数。

  • Filter(过滤器):这是org.springframework.cloud.gateway.filter.GatewayFilter的实例,我们可以使用它修改请求和响应。

 

1、创建Gateway 网关 Module,添加POM

<!-- Spring cloud gateway网关 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>

        <!-- nacos服务发现 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>

同时需要向nacos服务中心注册

2、配置文件

server:
  port: 8088

spring:
  application:
    name: api-gateway
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    gateway:
      discovery:
        locator:
          enabled: true  #是否与服务注册于发现组件结合,通过 serviceId 转发到具体的服务
          lower-case-service-id: true
      routes:
        - id: gateway-service-provider
          uri: lb://testprovider
          predicates:
            - Path=/provider/**
      #  - id: gateway-service-consumer
      #    uri: lb://testconsumer
      #    predicates:
      #      - Path=/co/**

各字段含义:

  • id:路由 ID(不是网关ID),保持唯一
  • uri:目标服务地址 (加 lb 根据注册中心服务名匹配)
  • predicates:路由条件,Predicate 接受一个输入参数,返回一个布尔值结果。该接口包含多种默认方法来将 Predicate 组合成其他复杂的逻辑(比如:与,或,非)。

上面这段配置的意思是,配置了一个 id 为 api-gateway 的路由规则,当访问地址 http://网关地址:端口/provider/** 时会自动转发到地址:http://testprovider/provider/** 上。

Spring Cloud Gateway 网关路由有两种配置方式:

  • 在配置文件 yml 中配置

  • 通过@Bean自定义 RouteLocator,在启动主类 Application 中配置

两种方式是效果是一样的,这里使用 yml 方式进配置。

3、开启服务中心注册

@SpringBootApplication
@EnableDiscoveryClient
public class GatewayApplication {

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

}

4、测试

4.1、启动gateway(http://localhost:8088),启动服务提供者(http://localhost:8083)

直接访问服务提供者 http://localhost:8083/provider/user/2

通过网关访问 http://localhost:8088/provider/user/2,结果一样,证明网关设置成功!

4.2、在复制一个provider,测试网关分发,修改Controller返回值区分不同服务,修改application.yml端口8073。

//测试服务提供者接口
    @RequestMapping("user/{fid}")
    public String getUser(@PathVariable long fid)
    {
        return "showFuser-T2:"+fid;  //区分第2个provider服务
    }

启动第二个provider,在nacos中心确认

访问“http://localhost:8088/provider/user/2”,刷新页面,轮询输出,成功!

showFuser-T2:2
showFuser:2

 

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值