• Gateway-网关


    Gateway是啥玩意?


       说法一:gateway是springmvc之上构建api网关的库,提供了一种简单的方法,来路由API,为api提供横切关注点(安全性,监控,度量,弹性-可扩展性)

      说法二:为微服务架构提供一种简单而有效的统一API路由管理方式。Spring Cloud Gateway目标是替代zuul,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关的基本功能,例如:安全,监控、埋点,限流等。

    Gateway官方结构


       看起来有点想springmvc的访问流程,经过dispatcher分发到控制中心HandlerMapping,springmvc工作流程可以参考这位博主:https://www.cnblogs.com/hamawep789/p/10840774.html

    Gateway职能


     1、请求接入:作为所有API接口服务请求的接入点

    2、业务聚合:作为所有后端业务服务的聚合点,所有服务访问都从网关出发

    3、中介策略:实现安全性、验证、路由、过滤、流量控制等策略

    4、统一管理:对所有API服务和策略进行统一管理

    Gateway重要概念


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

    Predicate(断言):输入类型是一个ServerWeb。

    FIlter(过滤器):Gateway中的Filter分为两种类型的Filter,分别是GatewayFilter和Global Fileter。过滤器Filter将会对请求和响应进行修改处理。

     gateway:
          routes:
          -  id: user_server
             #uri: http://localhost:9998/
             uri: lb://user9998   #这个是注册中心的服务名
             predicates:
               - Path=/user/**

    Gateway最小案例


     开发流程:1、创建网关服务模块 

    2、依赖配置,尽量和我的保持一致,参考前面创建项目的文档,这里注释了web依赖,添加版本管理、consul注册中心、健康检查、Gateway网关等依赖

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.2.5.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.demo</groupId>
        <artifactId>gateway</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>gateway</name>
        <description>Demo project for Spring Boot</description>
        <properties>
            <java.version>1.8</java.version>
            <spring-cloud.version>Hoxton.SR6</spring-cloud.version>
        </properties>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
        <dependencies>
    <!--
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    -->
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <!--consul注册中心的依赖 因为eureka2.0已经停止更新 所以就没有去用他-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-consul-discovery</artifactId>
            </dependency>
            <!--这个包是用来健康监控的-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
    
            <!--引入gateway-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-gateway</artifactId>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>

    3、这里需要修改一下配置文件名字,properties改成yum,为了同步官网的配置

    server:
      port: 8989  #网关端口
    
    spring:
      application:
        name: gateway   #consul注册名
      cloud:
        consul:
          host: localhost
          port: 8500    #把自己往consul注册中心扔
        gateway:
          routes:
          -  id: user_server
             uri: http://localhost:9998/
             #uri: lb://user9998   #这个是注册中心的服务名
             predicates:
               - Path=/user/**
    
          -  id: product_server   #自己给服务取的名字
             uri: http://localhost:9997/   #服务访问的地址
             #uri: lb://product9997   #从注册中心拿到该服务的名称
             predicates:  #断言
                - Path=/product/**

    4、访问测试,启动项目出现错误,两篇博客:(1)https://blog.csdn.net/qq_44349459/article/details/113613868 (2)https://blog.csdn.net/qq_44349459/article/details/113613287

      a、网关测试user服务访问,先确定服务能够正常访问

      网关访问,这样看来没问题的

     

      b、网关测试product服务访问,先确定服务跑通

      网关测试,确定能够访问

     5、上述访问,在配置文件中都是把路径给定死了的,不能进行负载均衡访问,我们需要改一下yml中的配置,让访问从定死的连接变成consul注册中心的服务名。

    总结


        任何访问路由route都要经过网关,网关进行统一管理交给openfeign进行负载均衡分发。也就是说,不管是直接访问user,还是user——>product,都是从gateway进行路由转发。

     


  • 相关阅读:
    storm学习笔记
    Hbase学习笔记
    Hadoop实战项目之网站数据点击流分析(转载分析)
    Hive实战之学生选课
    Hive实战之求月销售额和累计销售额
    Hive实战之每年最高温度+时间
    Hive实战之学生课程成绩
    网易-C++开发实习生-业务初面和复面(视频)-20211028
    2021粤港澳大湾区智能网络与通信系统论坛-1026~1027-线上
    jupyter notebook
  • 原文地址:https://www.cnblogs.com/HelloM/p/14350088.html
Copyright © 2020-2023  润新知