Gateway学习笔记

最近在学习微服务相关组件,今天和大家分享下Gateway的基础配置也作为自己的一个学习记录。

Gateway搭建其实很简单,至于它背后用了多牛逼的技术比zuul好了多少暂不讨论网上这类理论性的文章也是一把一把的,有兴趣可以自己找,今天只分析动手的过程。

一、工程搭建

本工程是基于springboot搭建,在一个父工程下包含两个子gateway和consume模块(module),gateway负责映射consumer html接口,以下为了使文章更简洁易懂仅给出Gateway搭建的重点步骤其余常规部分不做赘述

第一步 引入依赖


    
        org.springframework.cloud
        spring-cloud-starter-gateway
    

第二步 配置路由

新建application.yml,配置文件中路由分成两种,第一种匹配后是通过服务名作为映射地址转发,第二种匹配后是直接通过url映射转发

spring:
  application:
    name: gateway
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true # 开启动态路由(以服务名为uri)
      routes:
        - id: nacos-consumer # 路由ID,建议与服务名一致
          uri: lb://nacos-consumer # 匹配后提供路由地址
          predicates:
            - Path=/consumer/** # 断言,路径匹配后进入路由
        - id: 163 # 路由ID,建议与服务名一致
          uri: https://www.163.com/ # 匹配后提供路由地址
          predicates:
            - Path=/163/** # 断言,路径匹配后进入路由
server:
  port: 9000

 二、实现全局过滤器

新建 GlobalLogFileter 全局过滤器类,过滤器实现在请求到达后端前对请求进行拦截,同时在后端返回响应时对响应也进行拦截

package microapps.cn.gateway.filter;

import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

@Component
public class GlobalLogFileter implements GlobalFilter, Ordered {

    @Override
    public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        System.out.println("******************* 请求到达后端前 *********************");
        return chain.filter(exchange).then(Mono.fromRunnable(()->{
            System.out.println("******************* 请求从后端返回后 *********************");}

        ));
    }

    @Override
    public int getOrder() {
        return 0; // 过滤器优先级,数值越小优先级越高
    }
}

 

你可能感兴趣的:(Gateway,微服务,SOA)