微服务网关

作者: 小白先生哦

微服务网关

的微服务学习笔记系列目录https://www.cnblogs.com/mrxiaobai-wen/p/14278656.html

在前面简单的了解了一下注册中心Nacos的使用(https://www.cnblogs.com/mrxiaobai-wen/p/14304495.html),然后这两天上手了一下Spring Cloud Gateway,在这里做一个总结。


微服务网关简介

  • 什么是网关:顾名思义,它就是一个关口,所有想要进入到们系统的请求都首先要经过这个关口才行。

  • 为什么需要网关:比如在前面上手Nacos的时候,创建了两个服务,分别是nacos-server-spring-cloud和nacos-consumer-spring-cloud,两个不同的服务,不同的端口,不同的地址。那么在访问这两个服务的时候要分别记录两个地址访问两个不同的服务。但是这个系统是有机联系的,它们一起组成了一套系统。那么有没有什么方式可以让只请求一个地方就能获取到所需要的所有内容呢?那么这里就可以使用上网关。 们所有的请求都请求到网关上,至于转到哪一类服务上,转到哪一类服务的哪个实例上,完全由网关自己去判断。 如下图,用户请求某个服务,微服务系统内部服务之间相互依赖:
    graph LR 用户1[用户1] –> 网关[网关] 用户2[用户2] –> 网关[网关] 网关[网关] –> 服务一[服务一] 网关[网关] –> 服务二[服务二] 网关[网关] –> 服务三[服务三] 服务一[服务一] –> 服务二[服务二] 服务三[服务三] –> 服务二[服务二] 这样,们就能够屏蔽微服务内部的结构,对外提供一个统一的入口,而外部也不用关注微服务系统内部的结构。

  • 网关能做什么:

  • 负载均衡

  • 限流降级

  • 授权认证

  • 日志记录 列出的是几个常见的使用场景。

  • 常见微服务网关:

  • zuul

  • kong

  • spring cloud gateway


    Spring Cloud Gateway介绍

    Spring Cloud Gateway官方文档 Spring Cloud的一个子项目,其设计如图:

它有三个组件:

  • 路由(Route):一组断言与一组过滤器的集合,是网关的基本组件。
  • 断言(Predicate):是否匹配路由的判断条件。
  • 过滤器(Filter):对请求的处理逻辑,比如校验、鉴权、日志记录等等。

整体逻辑就是:请求进入到网关后,首先根据路由配置中的断言匹配handler,然后执行filter链。


Spring Cloud Gateway使用

  • 首先引入必要依赖
    <dependencies>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-dependencies</artifactId>
          <version>$</version>
          <type>pom</type>
          <scope>import</scope>
      </dependency>
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-dependencies</artifactId>
          <version>$</version>
          <type>pom</type>
          <scope>import</scope>
      </dependency>
      <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-alibaba-dependencies</artifactId>
          <version>$</version>
          <type>pom</type>
          <scope>import</scope>
      </dependency>
    </dependencies>
    
    根据们下面的配置文件,们使用到了注册中心,所以在这里还要引入nacos的依赖。
  • 创建配置文件application.yml
    spring:
    application:
      name: spring-cloud-geteway
    cloud:
      gateway:
        discovery:
          locator:
            enabled: true
            lower-case-service-id: true
        routes:
          - id: nacos-server-spring-cloud
            uri: lb://nacos-server-spring-cloud
            predicates:
              - Path=/nacos-server-spring-cloud/**
            filters:
              - StripPrefix= 1
          - id: nacos-consumer-spring-cloud
            uri: lb://nacos-consumer-spring-cloud
            predicates:
              - Path=/nacos-consumer-spring-cloud/**
            filters:
              - StripPrefix= 1
    
    注册中心配置bootstrap.yml
    spring:
    application:
      name: spring-cloud-geteway
    cloud:
      nacos:
        discovery:
          server-addr: 127.0.0.1:8848
        config:
          server-addr: 127.0.0.1:8848
          file-extension: yaml 指定yaml格式的配置
          encode: UTF-8
    
    其中routes就是配置路由列表,这里使用了之前用到的nacos-server-spring-cloud和nacos-consumer-spring-cloud两个服务。
    predicates:
    - Path=/nacos-server-spring-cloud/**
    
    则是标识匹配以nacos-server-spring-cloud开头的请求。 在filters中只用到了一个
  • StripPrefix= 1
    表示网关将请求转发到下游服务之前从请求中剥离的路径个数,这里配置了1,那么表示会将前面的nacos-server-spring-cloud路径去掉,然后再按照相应的地址进行转发。
    
  • 配置主类
    @SpringBootApplication
    @EnableDiscoveryClient
    public class SpringCloudGatewayApplication {
      public static void main(String[] args) {
          SpringApplication.run(SpringCloudGatewayApplication.class, args);
      }
    }
    

上面的准备工作做完后,启动网关、server、consumer、nacos服务,然后请求网关即可转发到对应的微服务上了。

代码完整地址: https://github.com/mrxiaobai-wen/springcloud_study

原文创作:小白先生哦

更多推荐

更多
  • .NET人工智能教程-四、使用自然语言理解 什么是 NLU?,自然语言理解的历史,为什么机器很难理解自然语言,语言理解智能服务(LUIS),为 LUIS 获取 Azure 订阅,演示:定义应用,概述,自然语言的复杂性,统计模型作为解决方案是不够的,充满希望的未来,基于 LUIS
    Apache CN

  • .NET人工智能教程-十、人工智能的未来 AI 为什么这么受欢迎?,改进的计算能力,人工智能算法的发明,数据是新的货币,云计算的出现,服务 vs 解决方案?,认知类别,NLU 的挑战和未来,演讲的挑战和未来,搜索的挑战和未来,挑战和建议的未来,AI 优先,智能边缘,将被淘汰的是
    Apache CN

  • .NET人工智能教程-七、与语音 API 交互 与语音互动的方式,入门指南,首先获取 JSON Web 令牌,消费者语音 API,语音合成,定制语音服务,说话人识别,摘要,认知搜索 API,语音识别,语音识别内部,定制声学模型,自定义语言模型,发音数据,自定义语音转文本端点,说话人验
    Apache CN

  • .NET人工智能教程-五、探索认知语言模式 iamfeanggoodgermanyvsargentinafootballliveepic fail,Bing 拼写检查 API,文本分析 API,Web 语言模型(WebLM) API,语言分析 API,概述,这是什么?
    Apache CN

  • .NET人工智能教程-一、人工智能基础入门 真实与虚构,历史和演变,微软和人工智能,基本概念,微软的认知服务,概述,当前的事态,人工智能的商品化,机器学习,语言,演讲,计算机视觉,视力,演讲,语言,知识,搜索, 想象一下,创建一个如此智能的软件,它不仅能理解人类语言,还能理解俚语
    Apache CN

  • .NET人工智能教程-三、使用微软技术构建对话式用户界面 什么是对话式用户界面?,简史,设计原则,微软机器人框架,使用 Bot 框架创建 CUI 应用,概述,一开始:命令行界面(CLI),然后是图形用户界面,UI 又一次进化了:对话式用户界面,艾在《崔》中的角色,崔的陷阱,混合用户界面(CUI
    Apache CN

  • .NET人工智能教程-二、在 Visual Studio 中创建基于人工智能的应用 使用认知服务的先决条件,设置开发环境,获取认知服务的 Azure 订阅密钥,测试 API,创建你的第一个基于人工智能的应用,让你的应用更有趣,概述,步骤 1:设置 Azure 帐户,步骤 2:创建一个新的认知服务帐户,步骤 3:获取订阅
    Apache CN

  • .NET人工智能教程-八、应用搜索产品 搜索无处不在,普及、预测、主动(搜索的三个 p),冰的历史,必应有什么独特之处?,搜索 API,Bing 图像搜索 API,Bing 新闻搜索 API,Bing 视频搜索 API,如何使用 Bing 视频搜索 API,Bing 网络搜索
    Apache CN

  • .NET人工智能教程-九、使用建议 了解基础知识,经常汇集(FBT)的建议,逐项,基于过去历史的建议,这些建议是如何起作用的?,模型和类型,建议构建,经常聚集在一起(FBT)建设,排名,SAR(智能自适应)构建,在构建中设置规则,离线评估,用户界面,摘要, 机器学习无处不
    Apache CN

  • .NET人工智能教程-六、消费和应用 LUIS 规划您的应用,创建 LUIS 应用,添加意图,添加/标记话语,发布您的应用,添加实体,添加短语列表,建议的后续步骤,LUIS 与 Bot 框架的集成,将您的机器人添加到 Skype,概述,机器人应该能做什么?,机器人需要用户提供什么信息
    Apache CN

  • 近期文章

    更多
    文章目录

      推荐作者

      更多