网关Ocelot功能演示完结,久等了~~~
前言
关于网关(Ocelot)的分享,还遗留一些功能没演示呢,接着来聊聊;这次重点针对网关Ocelot使用缓存、集成Polly做服务治理、集成IdentityServer4做认证授权来详细说说;如果对上一篇感兴趣,点这里(网关Ocelot功能演示安排的明明白白~~~)。
正文
1. 使用缓存
Ocelot中的缓存是对下游请求结果进行缓存处理,多次请求下游API时,在有效期内就可以从缓存中获取,提升服务性能。
以下演示代码还是接着上一次代码举例的,代码地址为:https://github.com/zyq025/IDS4Demo/tree/main/OcelotDemo/OcelotCodeDemo
1.1 使用默认内存缓存
其实只要增加下面红框部分的配置,就可以使用缓存了,如下:
配置说明:
- TtlSeconds:配置有效期的时间,单位为秒;
- Region:区域名,即分区缓存数据;Oeclot可以提供缓存管理接口,然后指定区域清除缓存;其实就是在Ocelot那里增加相关接口管理缓存;
配置文件准备好了,在ServiceAPI1中新增一个测试接口,如下:
运行网关和ServiceAPI1项目,然后根据配置的路由规则访问新增的接口:
到这有小伙伴会好奇,什么缓存操作都没做,就一个简单的配置就行了? 是的,Ocelot默认是有内存缓存实现的,老版本的InMemoryCache是通过Dictionary来实现的,就是键值对存储;新版本的是AspMemoryCache是通过IMemoryCache来实现的;所以只要配置开启就可以用啦,只不过功能比较单一,但可以集成其他扩展缓存,当然也可以自定义。
1.2 集成CacheManager做缓存
CacheManager除了缓存管理外,还封装了很多功能,如事件、性能计数器、并发更新等,让开发人员更容易处理和配置缓存。这里主要演示如何集成到Ocelot使用,就不详细展开说明啦,详解请查阅官网:https://cachemanager.michaco.net/documentation。
Ocelot中集成CacheManager非常简单,简单小三步:
引入Ocelot.Cache.CacheManager包;
注册对应的服务;
添加配置文件,其实就是配置FileCacheOptions,上一小节已经使用啦;
这样就完成集成了,运行网关和服务接口,然后访问,同样是每隔十秒才能重新获取值; 基于内存的使用是不是很简单,分布式访问咋办? 可不可以用Redis或者其他方式存储,答案当然是肯定的,往下看看↓↓↓
1.3 集成CacheManager配合Redis做分布式缓存
首先得安装好Redis环境,这块我就不展开啦,如果小伙伴对Redis系列感兴趣,也有专门的文章进行分享,进入Redis系列。
引入对应包,增加Redis相关配置即可,如下:
运行网关和服务接口,访问,同样也是每隔10秒才能获取新值,不过这次不一样的是数据在Redis中存储啦,结果如下:
1.4 自定义缓存
自定义缓存通过继承接口IOcelotCache,然后注册到容器即可,So easy!!!
自定义一个缓存类,继承IOcelotCache接口;
将缓存类注册到容器中;
运行看结果,还是用之前上面配置文件的FileCacheOptions信息:
如果没有特别定制化的需求,用现成造好的轮子也是很不错的。
2. 集成Polly做服务治理
在WebAPI中,接口超时、访问异常、并发量大等这种问题已经是家常便饭了,故障处理和弹性预防肯定少不了,上一节专门分享了一下Polly,这里就可以很丝滑般的集成进来啦,关于Polly的分享,请进入Polly-故障处理和弹性应对很有一手查看详情。
Ocelot集成Polly超级给力,引入包,注册服务,剩下的功能通过配置文件配置就轻松实现~~~
引入包,注册服务
超时熔断配置实现
为了方便测试,在ServiceAPI1中增加一个TimeoutTest的接口,如下:
然后配置超时熔断,然后运行,通过网关访问接口:
通过上面演示,如果超时,不让请求一直处于等待,及时反馈信息;Ocelot默认超时时间为90s。同时上面还配置了熔断机制,如果出现3次异常,就会熔断3秒。
限流配置实现,这里就用ServiceAPI1中CacheTest接口做演示
当达到最大请求时,可以自定义返回消息和状态码,只需要全局配置中增加如下配置即可:
运行效果如下:
3. 集成IdentityServer4做认证授权
认证授权在API项目中是不可缺少的,而对于微服务项目,每一个服务都做一次验证,显得冗余,而且后期代码维护性也不好,所以找一个公共的入口统一做认证是很不错的解决方案,而在网关上集成认证授权功能完全符合条件。
关于IdentityServer4的相关知识,之前做过几篇文章的分享,小伙伴可以进入IdentityServer4系列详细查看,这里不展开讲,重点还是演示Ocelot如何集成IdentityServer4;步骤如下:
准备一个IdentitiServer4的项目
为了不喧宾夺主,这里就直接用之前IdentityServer4 之Client Credentials走起来这篇文章中的AuthorizationServerDemo项目代码,github源码路径是:https://github.com/zyq025/IDS4Demo。直接拷过来即可。
Ocelot项目中增加认证逻辑
修改配置文件
配置认证信息可以针对路由进行配置,其中AuthenticationProviderKey对应的值与网关项目中注册服务定义的authenticationProviderKey值一致。 如果配置了认证信息,就会经过授权服务器进行认证校验,否则不进行验证。
运行结果如下:
通过上图,对应的API被保护起来啦!那试试获取一个Token,带上Token访问需认证的API地址,看看能否问;为了演示方便,这里要用到Postman工具啦,如下:
上面已经获取到Token,如果小伙伴有疑惑,可以去看看之前IDS4的文章。 将得到的Token放在请求头中去访问需认证的API地址,如下:
最后可以正常访问接口啦,统一在网关做共同的逻辑,避免各服务的功能实现冗余,在后期维护和替换也很方便。
源码地址:https://github.com/zyq025/IDS4Demo,统一放在这里面了。
总结
到这Ocelot的常用功能已经演示完毕了,这些示例只是提供思路,具体应用还需要小伙伴花点心思结合需求进行落地。
下一步的安排继续聊聊服务之间的调用、分布式最终一致性等开发应用,还会集成一些中间件进行日志监控和分析及链路追踪,对于部署还会系列的分享Nignx、Docker、K8s。
一个被程序搞丑的帅小伙,关注"Code综艺圈",跟我一起学~~~
网关Ocelot功能演示完结,久等了~~~的更多相关文章
- 网关Ocelot功能演示安排的明明白白~~~
前言 网关(Gateway)在微服务架构中至关重要,可以将其理解为是外部客户端(前端.MVC后台等调用方)与后台服务的连接点,通过这层可以做统一的处理,比如路由.身份认证和授权.服务治理等: 网关的好 ...
- .NET Core开源API网关 – Ocelot中文文档
Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由.请求聚合.服务发现.认证.鉴权.限流熔断.并内置了负载均衡器与Service Fabric.Butterfly ...
- 服务网关Ocelot 入门Demo系列(01-Ocelot极简单Demo及负载均衡的配置)
[前言] Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由.请求聚合.服务发现.认证.鉴权.限流熔断.并内置了负载均衡器与Service Fabric.Butt ...
- Net Core API网关Ocelot
Ocelot在github的地址 https://github.com/TomPallister/Ocelot , 非常给力的是在课程当天完成了.NET Core 2.0的升级,升级过程请看https ...
- .Net Core的API网关Ocelot使用 (一)
1.什么是API网关 API网关是微服务架构中的唯一入口,它提供一个单独且统一的API入口用于访问内部一个或多个API.它可以具有身份验证,监控,负载均衡,缓存,请求分片与管理,静态响应处理等.API ...
- asp.net core网关Ocelot的简单介绍& Ocelot集成Identity认证
文章简介 Ocelot网关简介 Ocelot集成Idnetity认证处理 Ocelot网关简介 Ocelot是一个基于netcore实现的API网关,本质是一组按特定顺序排列的中间件.Ocelot内 ...
- 初探.Net Core API 网关Ocelot(一)
一.介绍 Ocelot 是基于.NetCore实现的开源的API网关,支持IdentityServer认证.Ocelot具有路由.请求聚合.服务发现.认证.鉴权.限流熔断等功能,并内置了负载均衡器与S ...
- Consul+Ocelot+Polly在.NetCore中使用(.NET5)-网关Ocelot+Consul
相关文章 Consul+Ocelot+Polly在.NetCore中使用(.NET5)-Consul服务注册,服务发现 Consul+Ocelot+Polly在.NetCore中使用(.NET5)-网 ...
- Angularjs,WebAPI 搭建一个简易权限管理系统 —— 基本功能演示(二)
目录 前言 Angularjs名词与概念 Angularjs 基本功能演示 系统业务与实现 WebAPI项目主体结构 Angularjs 前端主体结构 基本功能演示(二) 非常抱歉这个月实在太忙,一直 ...
随机推荐
- MYSQL 悲观锁和乐观锁简单介绍及实现
1:悲观锁 1.1 特点: 每次查询都会进行锁行,怕"其他人"进行数据的修改. 1.2 实现步骤: 步骤1:开启事务test1,并对id=2的记录进行查询,并加锁,如: 步骤2 ...
- 学习java的第二天
Java第二天 标识符 标识符开头只能以字母和_开头 严格区分大小写 不能以关键词命名 变量 变量是什么:就是可以变化的量 Java是一种强类型语言,定义变量必须声明后才能使用 Java变量是程序中最 ...
- 身份认证:JSON Web Token
JSON Web Token(JWT)是一种基于JSON的开放标准((RFC 7519),也是目前最流行的跨域认证解决方案. 传统的 cookie 认证方式看起来遵守了 REST 架构的无状态要求,但 ...
- 看动画轻松学会 Raft 算法
由于 Paxos 算法过于晦涩难懂且难以实现,Diego Ongaro 提出了一种更易于理解和实现并能等价于 Paxos 算法的共识算法 - Raft 算法. 因为 Raft 算法清晰易懂越来越多的开 ...
- KDE 桌面不显示背景和状态栏
在arch的一次更新后,kde的桌面背景,插件,状态栏变成了一片黑,如下图所示. 解决办法:删除/home/stone/.config/plasma-org.kde.plasma.desktop-ap ...
- CRLF注入原理
CRLF 指的是回车符(CR,ASCII 13,\r,%0d) 和换行符(LF,ASCII 10,\n,%0a),操作系统就是根据这个标识来进行换行的,你在键盘输入回车键就是输出这个字符,只不过win ...
- [UNP] TCP 多进程服务器
UNP Part-2: Chapter 5. TCP Client/Server Example 的读书笔记. 阅读本文前,建议先阅读多线程服务器的实现,熟悉常见的 TCP 网络通信 API 的基本使 ...
- 最简单的JVM内存结构图
JVM内存结构图 大家好,好几天没有更新了,今天的内容有点多,我们详细介绍下JVM内部结构图,还是和之前一样,案例先行,方便大家理解记忆. /** * @author :jiaolian * @dat ...
- 项目实战:Qt+C#轨道交通行业高性能高流畅度模拟火车移动图像控件
需求 高清线阵相机扫描火车并自动切割单节车厢完成图像合成.通过视频图像处理组件流畅模拟火车行驶整个过程的视频图像: 1.模拟火车通过时的滚动图像,图像主要以两侧和顶部图像的预览为主; 2.模拟 ...
- 第22 章 : 有状态应用编排 StatefulSet
有状态应用编排 StatefulSet 本文将主要分享以下四方面的内容: "有状态"需求 用例解读 操作演示 架构设计 "有状态"需求 课程回顾 我们之前讲到过 ...