SpringCloud Alibaba光速入门 - Gateway网关(四)

Gateway简介

SpringCloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。

SpringCloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Zuul,在Spring Cloud 2.0以上版本中,没有对新版本的Zuul 2.0以上最新高性能版本进行集成,仍然还是使用的Zuul 2.0之前的非Reactor模式的老版本。而为了提升网关的性能,SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty。

Spring Cloud Gateway 的目标,不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/指标,和限流。

其主要特征分为以下五点:
(1)基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0

(2)集成 Hystrix 断路器

(3)集成 Spring Cloud DiscoveryClient

(4)Predicates 和 Filters 作用于特定路由,易于编写的 Predicates 和 Filters

(5)具备一些网关的高级功能:动态路由、限流、路径重写

引入依赖

sca-gateway 模块的pom中引入Gateway的maven依赖

        !-- SpringCloud Gateway 网关 -->
        
            org.springframework.cloud
            spring-cloud-starter-gateway
            2.2.1.RELEASE
        

        
            org.springframework.cloud
            spring-cloud-context
        

resources目录下新增bootstrap.yml文件

server:
  port: 88
  servlet:
    context-path: /gateway
spring:
  cloud:
    nacos:
      ##服务的注册
      discovery:
        server-addr: localhost:8848
      ##服务配置中心
      config:
        server-addr: localhost:8848
        file-extension: yaml
    gateway:
      discovery:
        locator:
          # 是否与服务发现组件进行结合,通过serviceId转发到具体的服务实例。默认false,
          # 为true代表开启基于服务发现的路由规则。
          enabled: true
          # 配置之后访问时无需大写
          lower-case-service-id: true
      routes:
        - id: normal-rest
          uri: lb://normal-rest
          predicates:
            # 路径匹配,以 api 开头,直接配置是不生效的,看 filters 配置
            - Path=/normal/**
          filters:
            # 前缀过滤,默认配置下,我们的请求路径是 http://localhost:9000/myshop-service-consumer-item/** 这时会路由到指定的服务
            # 此处配置去掉 1 个路径前缀,再配置上面的 Path=/api/**,就能按照 http://localhost:9000/api/** 的方式访问了
            - StripPrefix=1
  application:
    name: sca-gateway
  profiles:
    active: dev

创建启动类 GatewayApp.java

package com.ldh.sca;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.cloud.client.loadbalancer.LoadBalancerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;

@EnableDiscoveryClient
@SpringBootApplication
@ComponentScan("com.ldh.sca.gateway")
public class GatewayApp {

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

    @Bean
    LoadBalancerInterceptor loadBalancerInterceptor(LoadBalancerClient loadBalance) {
        return new LoadBalancerInterceptor(loadBalance);
    }
}

创建 GatewayService.java

package com.ldh.sca.gateway.service;

import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.stereotype.Component;


@Component
public class GatewayService implements ApplicationEventPublisherAware {

    private ApplicationEventPublisher publisher;

    @Override
    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
        this.publisher = applicationEventPublisher;
    }
}

启动sca-gateway项目,此时Nacos管理页面的服务列表会注册sca-gateway服务


浏览器访问 http://localhost:88/normal-rest/order/getName ,如果能正常返回ldh.name的值,则Gateway路由配置成功

你可能感兴趣的:(SpringCloud Alibaba光速入门 - Gateway网关(四))