当前位置: 首页 > news >正文

服务网关Gateway

三连哦

前言

API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题:

  1. 破坏了服务无状态特点。

    为了保证对外服务的安全性,我们需要实现对服务访问的权限控制,而开放服务的权限控制机制将会贯穿并污染整个开放服务的业务逻辑,这会带来的最直接问题是,破坏了服务集群中REST API无状态的特点。

     从具体开发和测试的角度来说,在工作中除了要考虑实际的业务逻辑之外,还需要额外考虑对接口访问的控制处理。
    
  2. 无法直接复用既有接口。

    当我们需要对一个即有的集群内访问接口,实现外部服务访问时,我们不得不通过在原有接口上增加校验逻辑,或增加一个代理调用来实现权限控制,无法直接复用原有的接口。

以上这些问题可以借助 API 网关解决。API 网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过 API 网关这一层。也就是说,API 的实现方面更多的考虑业务逻辑,而安全、性能、监控可以交由 API 网关来做,这样既提高业务灵活性又不缺安全性,

1、使用

1.1 添加pom依赖

        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId><version>2.1.3.RELEASE</version></dependency>

在这里插入图片描述

1.2 编写路由规则

现在想要实现针对于“http://localhost:88?url=baidu”,转发到“https://www.baidu.com”,针对于“http://localhost:88?url=qq”的请求,转发到“https://www.qq.com/”

这个路由匹配以url或者qq开头的路径,转发到https://www.baidu.com。也就是url=baidu,就跳转到https://www.baidu.com。url=qq,就跳转到https://www.qq.com

spring:cloud:gateway:routes:- id: test_routeuri: https://www.baidu.compredicates:- Query=url,baidu- id: qq_routeuri: https://www.qq.compredicates:- Query=url,qq

在这里插入图片描述

1.3 路由规则详解

基本概念:

  • Route:路由网关的基本构建块。它由ID,目的URI,断言(Predicate)集合和过滤器(filter)集合组成。如果断言聚合为真,则匹配该路由。
  • Predicate:这是一个 Java 8函数式断言。允许开发人员匹配来自HTTP请求的任何内容,例如请求头或参数。
  • 过滤器:可以在发送下游请求之前或之后修改请求和响应。

路由根据断言进行匹配,匹配成功就会转发请求给URI,在转发请求之前或者之后可以添加过滤器。

1.4 测试

在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/68278.html

相关文章:

  • (4)定时器
  • 项目实现读写分离操作(mysql)
  • VP记录:Educational Codeforces Round 148 (Rated for Div. 2) A~D1
  • 无线模块|如何选择天线和设计天线电路
  • (11)LCD1602液晶显示屏
  • 类和对象下
  • 【云计算•云原生】4.云原生之什么是Kubernetes
  • 云厂商降价潮背后:来中小企业战场「拼刺刀」
  • 2-单片机GPIO相关知识点及流水灯和按键采集小实验
  • 基础知识(王爽老师书第一章)
  • 非煤矿山电子封条建设算法 yolov8
  • 七大软件架构设计原则详解
  • 【Python入门】Python循环语句(while循环的嵌套应用)
  • 数据来源和搜集
  • Python入门(七)if语句(二)
  • [元带你学: eMMC完全解读 2] eMMC协议相关术语与定义
  • 预测杭州五一黄金周的旅游出行人数
  • 内防泄密重要,还是外防窃密重要?
  • ChatGPT:2. 使用OpenAI创建自己的AI网站:1. 初探API
  • 5月17日,今日信息差
  • 物联网的体系架构
  • Golang交叉编译
  • kafka3.x详解
  • kubectl常用命令|pod生命周期|金丝雀发布|超详细
  • 【Linux系统】Linux进程信号详解
  • 阿里云u1服务器通用算力型CPU处理器性能测评
  • hive的详细使用文档和使用案例
  • KL散度
  • Java基础学习(16)多线程
  • 【一起啃书】《机器学习》第五章 神经网络