springCloud Api网关搭建
环境搭建告一段落后,现在就是项目的搭建了,我们首先需要一个入口,一个所有请求的入口,这个入口就是我们的Api网关,那么什么是我们项目的网关,什么样的组件可以拿来就用呢,就是这个,Spring Cloud Gateway。为什么用这个不用Nginx,都是当入口,其实Spring Cloud Gateway更适合当服务的转发,用来对不同的业务做一个聚合。而Nginx适合对外,在最外层。
先说一下Api的作用。
- 性能:API高可用,负载均衡,容错机制。
- 安全:权限身份认证、脱敏,流量清洗,后端签名(保证全链路可信调用),黑名单(非法调用的限制)。
- 日志:日志记录(spainid,traceid)一旦涉及分布式,全链路跟踪必不可少。
- 缓存:数据缓存。
- 监控:记录请求响应数据,api耗时分析,性能监控。
- 限流:流量控制,错峰流控,可以定义多种限流规则。
- 灰度:线上灰度部署,可以减小风险。
- 路由:动态路由规则。
然后记录一下怎么和项目结合起来。
首先搭建我们的工程,需要这两个模块authorization-server gateway-server
用来认证客户的登录信息以及,对登录的信息拦截,配置我们的限流规则
先说gateway-server,在pom中引入我们需要的包
<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
</dependencies>
这只是引入了我们的基础包,就是说我们现在是有了gateway的能力,但是没有和我们的中间件结合起来。作为网关,所有的请求都会经过这里,我们是需要很需要限流规则的。那么我们需要和Sentinel结合起来,
依赖加一下
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency>
先上配置
server:port: 80
spring:application:name: gateway-servercloud:nacos:discovery:server-addr: nacos-server:8848 # 修改本机的host 文件gateway:discovery:locator:enabled: truelower-case-service-id: true # admin-service ADMIN-SERVICE /admin-service/** -> 微服务(ADMIN-SERVICE)routes:- id: admin-service_routeruri: lb://admin-service # 转发到那个目的地predicates:- Path=/admin/**- id: test_routeruri: http://www.aliyun.compredicates:- Path=/product# http://www.baidu.com/test# http://www.aliyun.com/productsentinel:filter:enabled: truedatasource:ds1.file:file: classpath:router-flow.jsonruleType: gw-flowds2.file:file: classpath:api-flow.json #api-flow.json 接口的分组ruleType: gw_api_group
可以注意到我们的Sentinel配置中有两个datasource,配置如下
gw-flow.json
[{"resource": "admin-service_router","resourceMode": 0 ,"count": 2,"intervalSec": 60},{"resource": "admin-service-api","resourceMode":"1","count": 1,"intervalSec": 60}
]
api-group.json
[{"apiName": "admin-service-api","predicateItems": [{"pattern": "/admin/login"}]}
]
这是两个不同的限流规则,针对请求限流和针对路由限流,
resource:资源名称,可以是网关中的 route 名称或者用户自定义的 API 分组名称。
resourceMode:规则是针对 API Gateway 的 route(RESOURCE_MODE_ROUTE_ID)还是用户在 Sentinel 中定义的 API 分组(RESOURCE_MODE_CUSTOM_API_NAME),默认是 route。
grade:限流指标维度,同限流规则的 grade 字段。
count:限流阈值
intervalSec:统计时间窗口,单位是秒,默认是 1 秒。
简单的限流就配置好了,我们请求访问时,超过了限制就访问不到了。
我们现在的限流配置是通过json的方式写在代码中,这一点也不智能,也不优美。是的,我们需要持久化。这就是我们需要Nacos的原因,
添加依赖
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
然后修改我们的配置
datasource:
# ds1.file:
# file: classpath:gw-flow.json # 网关 + API分组的限流
# ruleType: gw_flowds1.nacos: #com.alibaba.csp.sentinel.datasource.nacos.NacosDataSource 使用Nacos持久化我的sentinel 数据时,需要添加nacos-datasource的依赖serverAddr: nacos-server:8848dataId: gw-flowruleType: gw_flow
#
# ds2.file:
# file: classpath:api-group.json
# ruleType: gw_api_groupds2.nacos:serverAddr: nacos-server:8848dataId: api-groupruleType: gw_api_group
接下来就是去我们搭建好的nacos上配置我们的限流规则了
搭建好,点击发布,OK
记得分组也加上
好了,我们的简单限流就完成了。不用写代码,我们的功能就达到了。
springCloud Api网关搭建相关推荐
- SpringCloud Zuul 网关搭建及配置
目录 一.Zuul网关 二.Zuul服务的前期准备 2.1 注册中心EurekaServer的搭建 2.2 EurekaService的搭建 三.Zuul服务搭建 五.Zuul的访问 六.Zuul的更 ...
- .net core Ocelot Consul 实现API网关 服务注册 服务发现 负载均衡
大神张善友 分享过一篇 <.NET Core 在腾讯财付通的企业级应用开发实践>里面就是用.net core 和 Ocelot搭建的可扩展的高性能Api网关. Ocelot(http:// ...
- 【微服务】之六:轻松搞定SpringCloud微服务-API网关zuul
通过前面几篇文章的介绍,我们可以轻松搭建起来微服务体系中比较重要的几个基础构建服务.那么,在本篇博文中,我们重点讲解一下,如何将所有微服务的API同意对外暴露,这个就设计API网关的概念. 本系列教程 ...
- API网关与zuul1.x与springcloud的三角关系
[TOC] 1. API网关简介 API 网关可以看做系统与外界联通的入口,我们可以在网关处理一些非业务逻辑的逻辑,比如权限验证,监控,缓存,请求路由等等.因此API网关可以承接两个方向的入口. 移动 ...
- spring cloud+dotnet core搭建微服务架构:Api网关(三)
前言 国庆假期,一直没有时间更新. 根据群里面的同学的提问,强烈推荐大家先熟悉下spring cloud.文章下面有纯洁大神的spring cloud系列. 上一章最后说了,因为服务是不对外暴露的,所 ...
- SpringCloud 从菜鸟到大牛之七 服务网关 Zuul API网关等等
话不多说 ,照常理 ,先来一张 整体架构图 服务网关 的要素 常见的网关方案 Nginx +Lua Kong 收费的Kong Tyk(Go语言开发) Spring Cloud Zuul Spring ...
- 原 docker(22):使用docker 搭建网关,Mashape API 网关 Kong,安装dashboard,和pgadmin4
[其他docker相关分类]: https://blog.csdn.net/freewebsys/article/category/3103827 本文的原文连接是: http://blog.csdn ...
- 从零学SpringCloud系列(七):API网关Zuul
一.为什么需要API网关 通过前面对几个组件的 介绍,我们基本可以构建一个下图中的简单的微服务架构系统: 我们聚焦到Open Service 和 外部调用的地方,随着下方服务的增多,我们需要手动维护负 ...
- 企业安全建设之API网关kong的搭建
背景: 1.近年来,微服务架构在大中型企业中的应用越来越广泛.在解决了单体架构所带来的负责性高.部署慢.创新性低的问题的同时,也带来了一些新的安全问题.在微服务的架构中,一个大的应用会被拆分成多个小的 ...
最新文章
- Mask-RCNN论文解读
- 一首考研人不得不看的立志诗!!!!!!
- Silver Cow Party POJ - 3268 (固定起点和固定终点的最短路)
- 人生永无止境的意思是什么_励志人生:生活不会给任何脆弱鼓掌。
- qbytearry有数据上限吗_金仕达大数据开发岗位面试题
- 案例5-条件查询商品
- 包含所有的计算机视频教程
- Android JS交互-记录我所遇到的
- WPS文字标题级别的设置和调整——多种方法任选
- 实战案例丨腾讯安全托管服务MSS助力数字广东重保期间“0事故”
- 再谈Spring(二):AOP面向切面编程 - Aspect 拦截器
- javascript进阶面向对象ES6
- Excel加密如何破解
- Python基础知识day2
- 浅谈到底什么是系统集成(弱电)和项目管理?
- java 金庸群侠传_《金庸群侠传》MOD发展史(官方版本 转自铁血丹心论坛)
- 集合,ArrayList,LinkedList,HashMap,LinkedHashMap,ConcurremtHashMap分别的总结,volatile 关键字的使用
- mint-ui message box confirm弹框确认和取消按钮的回调
- 淘宝分拆为三家独立公司:淘宝、商城和一淘
- 关于OpenCV for Python入门-dlib实现人脸检测