gateway网关_SpringCloud技术指南系列(十二)API网关之Gateway使用
SpringCloud技术指南系列(十二)API网关之Gateway使用
一、概述
API网关是一个更为智能的应用服务器,它的定义类似于面向对象设计模式中的Facade模式,它的存在就像是整个微服务架构系统的门面一样,所有的外部客户端访问都需要经过它来进行调度和过滤。它除了要实现请求路由、 负载均衡、 校验过滤等功能之外,还需要更多能力,比如与服务治理框架的结合、请求转发时的熔断机制、服务的聚合等一系列高级功能。
在SpringCloud全家桶中,API网关有Zuul和gateway两种实现。 1. zuul进来逐渐被gateway取代。 2. zuul可以整合进任何SpringBoot应用 3. gateway基于异步非阻塞模型,使用的netty+webflux实现,不能加入web依赖,默认加载加入webflux依赖。 4. Spring Cloud zuul使用的仍是zuul 1.x,zuul 2.x也是异步非阻塞的。 4. 选用zuul还是gateway,要看使用场景,如果在已有的非WebFlux项目使用,要用zuul。单纯的API网关独立部署,建议gateway。
代码可以在SpringBoot组件化构建https://www.pomit.cn/java/spring/springcloud.html中的EurekaGateway、ZkGateway和ConsulGateway组件中查看,并下载。分别对应三种不同的服务注册方式。
首发地址: 品茗IT-同步发布
如果大家正在寻找一个java的学习环境,或者在开发中遇到困难,可以加入我们的java学习圈,点击即可加入,共同学习,节约学习时间,减少很多在学习中遇到的难题。
二、项目配置
本篇的配置基于服务注册发现的项目基础上,并选择Consul + Gateway为例讲解如何使用zuul做API网关。至于(Eureka + Gateway)和 (zookeeper + Gateway)写法上和(consul + Gateway)是一样的,不再分开章节描述。
这里选择Consul + Gateway为例,是因为它需要一个额外的健康检查接口,其他无区别。
可以参考我前面的文章做对比:
《SpringCloud技术指南系列(五)服务注册发现之Consul服务调用》
《SpringCloud技术指南系列(三)服务注册发现之Eureka服务调用》
《SpringCloud技术指南系列(七)服务注册发现之Zookeeper服务调用》
2.1 引入依赖
需要在建立好的项目中引入spring-cloud-starter-gateway,不能引入spring-boot-starter-web,因为它用的是webflux。
如果需要使用hystrix,要显式引入spring-cloud-starter-netflix-hystrix。
本篇是在consul的服务发现基础上进行gateway的配置,因此还需要引入consul相关配置。
依赖如下:
<?xml version="1.0"?>
父模块pom文件可以在https://www.pomit.cn/spring/SpringCloudWork/pom.xml获取。
2.2 配置文件
这里使用yaml文件写配置,配置文件application.yml:
application.yml:
server:port: 8819
spring:application:name: consulGatewaycloud:consul:host: 127.0.0.1port: 8500discovery:prefer-ip-address: truehealthCheckPath: /consul/healthgateway:discovery:locator:enabled: truelowerCaseServiceId: trueroutes:- id: myRouteuri: lb://consulFeignpredicates:- Path=/test/**filters:- StripPrefix=1- name: Hystrixargs:name: fallbackcmdfallbackUri: forward:/incaseoffailureusethiss- id: myOutsideRouteuri: https://cn.bing.com/predicates:- Path=/search/**filters:- StripPrefix=1
这里,表示API网关在8819端口监听,名字是consulGateway。
- spring.cloud.consul开头的配置时consul服务注册发现的配置。前面章节已经有说明。
- spring.cloud.gateway.discovery.locator.enabled开启路由转发功能
- spring.cloud.gateway.discovery.locator.lowerCaseServiceId是指注册到cunsul的服务使用小写。
- spring.cloud.gateway.routes.*:配置路由转发。id是唯一的,uri如果使用lb:开头,表示使用注册的服务进行负载均衡。predicates.Path:表示请求的路径。filters.StripPrefix表示转发时路径去掉几层前缀。filters.name如果是Hystrix,表示使用Hystrix进行熔断降级,需要配置fallbackUri进行降低转发。
三、服务不可用降级接口
如果配置了hystrix做熔断。当请求次数失败次数过多(我测试第一次是8次,第二次变7次了),将不再请求,直接请求/incaseoffailureusethiss降级。
如图所示,1.01s是请求失败的过程,7次之后,就直接熔断,所以响应时间小于10ms了。
FallbackController:
package
四、启动
启动类无需做额外的配置,这里只有一个服务注册的注解@EnableDiscoveryClient。
ConsulGatewayApplication :
package
五、其他web
我们仍可以写自己的web服务,和Gateway的转发互不影响,但是路径别重复了。 ConsulGatewayRest :
package
六、Consul的健康检测
这个是使用consul做注册中心才需要的。
HealthWeb:
package
七、使用到的实体
ResultModel:
详细完整的实体,可以访问品茗IT-博客《SpringCloud技术指南系列(十二)API网关之Gateway使用》进行查看
品茗IT-博客专题:https://www.pomit.cn/lecture.html汇总了Spring专题、Springboot专题、SpringCloud专题、web基础配置专题。
快速构建项目
Spring项目快速开发工具:
一键快速构建Spring项目工具
一键快速构建SpringBoot项目工具
一键快速构建SpringCloud项目工具
一站式Springboot项目生成
Mysql一键生成Mybatis注解Mapper
Spring组件化构建
SpringBoot组件化构建
SpringCloud服务化构建
喜欢这篇文章么,喜欢就加入我们一起讨论SpringBoot使用吧!
gateway网关_SpringCloud技术指南系列(十二)API网关之Gateway使用相关推荐
- SpringCloud技术指南系列(十五)分布式链路跟踪Sleuth与Zipkin实现
SpringCloud技术指南系列(十五)分布式链路跟踪Sleuth与Zipkin实现 一.概述 分布式链路追踪,是一种用于分析和监控应用程序的方法,尤其是那些使用微服务架构的那些应用.分布式链路跟踪 ...
- SpringCloud技术指南系列(十三)分布式锁之Redis实现(redisson)
SpringCloud技术指南系列(十三)分布式锁之Redis实现(redisson) 一.概述 分布式锁是控制分布式系统之间同步访问共享资源的一种方式.在分布式系统中,常常需要协调他们的动作.如果不 ...
- Alamofire源码解读系列(十二)之请求(Request)
本篇是Alamofire中的请求抽象层的讲解 前言 在Alamofire中,围绕着Request,设计了很多额外的特性,这也恰恰表明,Request是所有请求的基础部分和发起点.这无疑给我们一个Req ...
- Web 前端开发精华文章推荐(jQuery、HTML5、CSS3)【系列十二】
2012年12月12日,[<Web 前端开发人员和设计师必读文章>系列十二]和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HT ...
- 苏州科技大学计算机学院 李双娴,苏州大学计算机科学与技术学院第十二次研究生代表大会顺利召开...
为了更好的总结和部署我院研究生分会的工作,苏州大学计算机科学与技术学院第十二次研究生代表大会于2015年12月5日下午1点在理工楼504教室隆重召开.苏州大学研究生院教育与管理科科长严明老师.院党委副 ...
- kotlin杂谈系列十二(Kotlin和Java的互操作)
Kotlin杂谈系列十二 这次就主要来谈谈kotlin和java互操作的问题 kotlin出来的使命就是为了解决java的模板问题和一些冗长的问题所以kotlin天生就很好的支持了java 所以我们在 ...
- Reflex WMS入门系列十二:Reflex里的Location
Reflex WMS入门系列十二:Reflex里的Location 玩过SAP系统里的人都知道,在SAP系统里库存管理分为IM Level和WM Level.IM Level的仓库,在SAP里被定义为 ...
- Highcharts翻译系列十二:gauge测量图
Highcharts翻译系列十二:gauge测量图 说明 测量图需要highcharts-more.js的支持 属性 参数 描述 默认值 animation 动画 true color 主要颜色或序列 ...
- 互动媒体技术课程作业 十二个“一”的人格感受
互动媒体技术课程作业 十二个"一"的人格感受 (本文与编程无关) 十二个"一"的人格评价--想象为十二个异性追求者 结合以下五个方面评价 开放性(opennes ...
最新文章
- HDU 1253-大逃亡(裸-DBFS)
- javascript:鼠标拖动图标技术
- Day2:C语言学习2
- 俄罗斯方块c语言代码及注释,俄罗斯方块C语言代码
- 众多电子秤方案免费拿~挑一个?
- 会员积分消费系统 php,会员消费管理系统充值营销系统会员积分消费系统.net源码...
- C语言if语句实现成绩划分
- Asp.net 万年历
- 自动化学科前沿讲座分享,作业,自动化与人工智能
- 在中信工作的那些日子
- 日语 假名对应的汉字来源
- PADS Logic 原理图连接
- 小白如何学习运营公众号?
- 吻吻更健康!揭晓接吻的11大优点
- java学习笔记day09 final、多态、抽象类、接口
- vue-quill-editor 代码高亮问题
- 传输层 -------- TCP(一)
- (PTA)7-4 求奇数分之一序列前N项和 (15分)
- 选择25k的996还是18k的965
- 日神领道----阅读圣经有感
热门文章
- mitmproxy抓包 | Python篡改请求参数实战(五)
- 【Python】random模块生成多种类型随机数
- 编写函数digit(num, k),函数功能是:求整数num从右边开始的第k位数字的值,如果num位数不足k位则返回0。...
- ListT.Find用法学习
- 策略模式,工厂模式,单例模式编写身份证的验证算法
- BroadcastReceiver 广播机制详解
- MySQL数据库开启root用户远程登录
- jQuery教程10-表单元素选择器
- 分析MySQL数据类型的长度
- pip download timeout 下载慢,超时解决方法