环境搭建告一段落后,现在就是项目的搭建了,我们首先需要一个入口,一个所有请求的入口,这个入口就是我们的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网关搭建相关推荐

  1. SpringCloud Zuul 网关搭建及配置

    目录 一.Zuul网关 二.Zuul服务的前期准备 2.1 注册中心EurekaServer的搭建 2.2 EurekaService的搭建 三.Zuul服务搭建 五.Zuul的访问 六.Zuul的更 ...

  2. .net core Ocelot Consul 实现API网关 服务注册 服务发现 负载均衡

    大神张善友 分享过一篇 <.NET Core 在腾讯财付通的企业级应用开发实践>里面就是用.net core 和 Ocelot搭建的可扩展的高性能Api网关. Ocelot(http:// ...

  3. 【微服务】之六:轻松搞定SpringCloud微服务-API网关zuul

    通过前面几篇文章的介绍,我们可以轻松搭建起来微服务体系中比较重要的几个基础构建服务.那么,在本篇博文中,我们重点讲解一下,如何将所有微服务的API同意对外暴露,这个就设计API网关的概念. 本系列教程 ...

  4. API网关与zuul1.x与springcloud的三角关系

    [TOC] 1. API网关简介 API 网关可以看做系统与外界联通的入口,我们可以在网关处理一些非业务逻辑的逻辑,比如权限验证,监控,缓存,请求路由等等.因此API网关可以承接两个方向的入口. 移动 ...

  5. spring cloud+dotnet core搭建微服务架构:Api网关(三)

    前言 国庆假期,一直没有时间更新. 根据群里面的同学的提问,强烈推荐大家先熟悉下spring cloud.文章下面有纯洁大神的spring cloud系列. 上一章最后说了,因为服务是不对外暴露的,所 ...

  6. SpringCloud 从菜鸟到大牛之七 服务网关 Zuul API网关等等

    话不多说 ,照常理 ,先来一张 整体架构图 服务网关 的要素 常见的网关方案 Nginx +Lua Kong 收费的Kong Tyk(Go语言开发) Spring Cloud Zuul Spring ...

  7. 原 docker(22):使用docker 搭建网关,Mashape API 网关 Kong,安装dashboard,和pgadmin4

    [其他docker相关分类]: https://blog.csdn.net/freewebsys/article/category/3103827 本文的原文连接是: http://blog.csdn ...

  8. 从零学SpringCloud系列(七):API网关Zuul

    一.为什么需要API网关 通过前面对几个组件的 介绍,我们基本可以构建一个下图中的简单的微服务架构系统: 我们聚焦到Open Service 和 外部调用的地方,随着下方服务的增多,我们需要手动维护负 ...

  9. 企业安全建设之API网关kong的搭建

    背景: 1.近年来,微服务架构在大中型企业中的应用越来越广泛.在解决了单体架构所带来的负责性高.部署慢.创新性低的问题的同时,也带来了一些新的安全问题.在微服务的架构中,一个大的应用会被拆分成多个小的 ...

最新文章

  1. Mask-RCNN论文解读
  2. 一首考研人不得不看的立志诗!!!!!!
  3. Silver Cow Party POJ - 3268 (固定起点和固定终点的最短路)
  4. 人生永无止境的意思是什么_励志人生:生活不会给任何脆弱鼓掌。
  5. qbytearry有数据上限吗_金仕达大数据开发岗位面试题
  6. 案例5-条件查询商品
  7. 包含所有的计算机视频教程
  8. Android JS交互-记录我所遇到的
  9. WPS文字标题级别的设置和调整——多种方法任选
  10. 实战案例丨腾讯安全托管服务MSS助力数字广东重保期间“0事故”
  11. 再谈Spring(二):AOP面向切面编程 - Aspect 拦截器
  12. javascript进阶面向对象ES6
  13. Excel加密如何破解
  14. Python基础知识day2
  15. 浅谈到底什么是系统集成(弱电)和项目管理?
  16. java 金庸群侠传_《金庸群侠传》MOD发展史(官方版本 转自铁血丹心论坛)
  17. 集合,ArrayList,LinkedList,HashMap,LinkedHashMap,ConcurremtHashMap分别的总结,volatile 关键字的使用
  18. mint-ui message box confirm弹框确认和取消按钮的回调
  19. 淘宝分拆为三家独立公司:淘宝、商城和一淘
  20. 关于OpenCV for Python入门-dlib实现人脸检测

热门文章

  1. 【C++---16】常指针和常引用
  2. Rework 读后感
  3. 经典的《Rework》
  4. Kafka3.0 SASL安全认证
  5. SP603 OPPO A59 主观体验功耗对比
  6. 阿里云服务器ftp连接后21端口无法使用的问题
  7. 基于分布式的智联招聘数据的大屏可视化分析与预测
  8. springboot下载excel模板
  9. 生态保护重要性评价之防风固沙重要性评价
  10. 微信小程序登录 返回 -41003