概述

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

  1. 客户端会多次请求不同的微服务,增加了客户端的复杂性。
  2. 存在跨域请求,在一定场景下处理相对复杂。
  3. 认证复杂,每个服务都需要独立认证。
  4. 难以重构,随着项目的迭代,可能需要重新划分微服务。例如,可能将多个服务合并成一个或者将一个服务拆分成多个。如果客户端直接与微服务通信,那么重构将会很难实施。
  5. 某些微服务可能使用了防火墙 / 浏览器不友好的协议,直接访问会有一定的困难。

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

由于篇幅比较长, 决定分几篇来介绍相关知识:

  1. spring-cloud-gateway简介+基本环境搭建
  2. spring-cloud-gateway过滤器+审计
  3. spring-cloud-gateway静态路由
  4. spring-cloud-gateway动态路由
  5. spring-cloud-gateway限流+过载保护
  6. spring-cloud-gateway认证
  7. spring-cloud-gateway鉴权

环境参数

  • 开发工具: IDEA
  • 基础工具: Maven+JDK8
  • SpringBoot版本: 2.1.4.RELEASE
  • SpringCloud版本: Greenwich.SR3
  • 服务发现: consul

consul搭建可以参照官网,开箱即用。也可以参照Docker实战之Consul集群 基于docker环境搭建。

SpringCloud项目搭建

项目pom.xml

<?xml version="1.0" encoding="UTF-8"?>

服务提供者1(服务提供+服务消费)

pom.xml

<?xml version="1.0" encoding="UTF-8"?>

配置文件application.yml

spring

SpringBoot项目入口Provider1App.java

@EnableFeignClients

远程调用RemoteService.java

@FeignClient

web服务

@RestController

服务提供者2(服务提供)

provider2和provider1类似,这里只改写下web实现类

@RestController

Feign中集成了Ribbon负载均衡。这里可以用不同端口启动2个provider2实例, 然后通过provider1调用provider2,可以看到轮询输出不同的端口。

网关服务

pom.xml

<?xml version="1.0" encoding="UTF-8"?>

application.yml

server

启动类

@SpringBootApplication

结语

到这里基本环境就搭建完毕了,下节做过滤器的相关实现。感谢大家阅读,欢迎关注公众号【当我遇上你】学习交流。

gateway动态路由_spring-cloud-gateway简介相关推荐

  1. gateway请求拦截_spring cloud gateway 拦截request Body

    在接入Spring-Cloud-Gateway时,可能有需求进行缓存Json-Body数据或者Form-Urlencoded数据的情况. 由于Spring-Cloud-Gateway是以WebFlux ...

  2. Spring Cloud Gateway 动态路由管理,一点都不吹,应该没有比这更好的管理系统了吧

      本文介绍的 Spring Cloud Gateway 动态路由.不比其他博客通篇 copy 的 Gateway 动态路由,直接上干货!!!为你们提供了一套完整的动态路由管理系统.文末附本文全套代码 ...

  3. Spring Cloud Gateway动态路由实现

    Gateway上线部署分析 当你的网关程序开发完成之后,需要部署到生产环境,这个时候你的程序不能是单点运行的,肯定是多节点启动(独立部署或者docker等容器部署),防止单节点故障导致整个服务不能访问 ...

  4. angularjs 让当前路由重新加载_Spring Cloud Gateway的动态路由怎样做?集成Nacos实现很简单...

    一.说明 网关的核心概念就是路由配置和路由规则,而作为所有请求流量的入口,在实际生产环境中为了保证高可靠和高可用,是尽量要避免重启的,所以实现动态路由是非常有必要的:本文主要介绍 Spring Clo ...

  5. spring gateway 限流持久化_Spring Cloud Gateway 扩展支持动态限流

    之前分享过 一篇 <Spring Cloud Gateway 原生的接口限流该怎么玩>, 核心是依赖Spring Cloud Gateway 默认提供的限流过滤器来实现 原生Request ...

  6. gateway动态路由_Java如何用Spring Cloud奇淫小技巧 来使用gateway作为服务网管

    什么是网关 在微服务架构里,服务的粒度被进一步细分,各个业务服务可以被独立的设计.开发.测试.部署和管理.这时,各个独立部署单元可以用不同的开发测试团队维护,可以使用不同的编程语言和技术平台进行设计, ...

  7. Nacos + Spring Cloud Gateway动态路由配置

    前言 Nacos最近项目一直在使用,其简单灵活,支持更细粒度的命令空间,分组等为麻烦复杂的环境切换提供了方便:同时也很好支持动态路由的配置,只需要简单的几步即可.在国产的注册中心.配置中心中比较突出, ...

  8. gateway动态路由_无语!SpringCloud Gateway动态路由之Nacos,我已经讲得很清楚了

    前言 当我们的网关Gateway程序开发完成之后,需要部署到生产环境,这个时候你的程序不能是单点运行的,肯定是多节点启动(独立部署或者docker等容器部署),防止单节点故障导致整个服务不能访问,网关 ...

  9. gateway动态路由_微服务中的网关技术:Gateway

    技术/杨33 一.Gateway是什么 为微服务提供一种简单有效的统一的API路由管理方式. Gateway是基于WebFlux框架实现的,而WebFlux框架底层使用了高性能的Reactor模式通讯 ...

最新文章

  1. FFmpeg中libswresample库简介及测试代码
  2. html经过一段时间自动交换图像,Dreamweaver交换行为:实现图像交换
  3. 43 | 发挥人的潜能:探索式测试
  4. .net中用Action等委托向外传递参数
  5. PHP设计模式(6)迭代器模式
  6. Zookeeper:基于Zookeeper的分布式锁与领导选举
  7. mongodb上限集合_用Java创建MongoDB上限集合
  8. 信元模式mpls 避免环路_【基础】交换机堆叠模式
  9. 【转载】关联分析中的支持度、置信度和提升度
  10. Java实现数据批量导入数据库(优化速度-2种方法)
  11. 国土空间规划中工作底图如何制作
  12. AIX 6.1 连接DS4700,多路径mpio,mpio_get_config -Av 需要打补丁。
  13. 团队项目改进与详细设计
  14. HFSS19 官方中文教程系列Workshops L01
  15. Spring Cloud Eureka Server 源码解析(七)处理客户端增量下载请求、读写锁问题
  16. Kali系统安装Visual Studio Code
  17. 【网络】能远程电脑,但ping不通
  18. Tensorlow 中文API:tf.zeros() tf.ones()tf.fill()tf.constant()
  19. 国内外php主流开源cms、SNS、DIGG、RSS、Wiki汇总
  20. 计算机上的蜘蛛纸牌游戏打不开,win10系统系统笔记本打不开蜘蛛纸牌游戏的具体方法...

热门文章

  1. Containerd 的前世今生和保姆级入门教程
  2. 每日一皮:据说现在小孩从小容易生病、体质不如从前是因为少了这个运动......
  3. 每日一皮:QA一来,大家都要靠边站!
  4. 关于赠书《VS Code》断货延迟的通知!
  5. opencv 直线检测笔记
  6. module 'paddle.fluid' has no attribute 'data'
  7. android 人脸检测 姿态估计
  8. pytorch 多进程读写同一个文件
  9. Python装饰器实现一个代码计时器?
  10. ubuntu 修改卷标