前言

关于网关(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功能演示完结,久等了~~~的更多相关文章

  1. 网关Ocelot功能演示安排的明明白白~~~

    前言 网关(Gateway)在微服务架构中至关重要,可以将其理解为是外部客户端(前端.MVC后台等调用方)与后台服务的连接点,通过这层可以做统一的处理,比如路由.身份认证和授权.服务治理等: 网关的好 ...

  2. .NET Core开源API网关 – Ocelot中文文档

    Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由.请求聚合.服务发现.认证.鉴权.限流熔断.并内置了负载均衡器与Service Fabric.Butterfly ...

  3. 服务网关Ocelot 入门Demo系列(01-Ocelot极简单Demo及负载均衡的配置)

    [前言] Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由.请求聚合.服务发现.认证.鉴权.限流熔断.并内置了负载均衡器与Service Fabric.Butt ...

  4. Net Core API网关Ocelot

    Ocelot在github的地址 https://github.com/TomPallister/Ocelot , 非常给力的是在课程当天完成了.NET Core 2.0的升级,升级过程请看https ...

  5. .Net Core的API网关Ocelot使用 (一)

    1.什么是API网关 API网关是微服务架构中的唯一入口,它提供一个单独且统一的API入口用于访问内部一个或多个API.它可以具有身份验证,监控,负载均衡,缓存,请求分片与管理,静态响应处理等.API ...

  6. asp.net core网关Ocelot的简单介绍& Ocelot集成Identity认证

    文章简介  Ocelot网关简介 Ocelot集成Idnetity认证处理 Ocelot网关简介 Ocelot是一个基于netcore实现的API网关,本质是一组按特定顺序排列的中间件.Ocelot内 ...

  7. 初探.Net Core API 网关Ocelot(一)

    一.介绍 Ocelot 是基于.NetCore实现的开源的API网关,支持IdentityServer认证.Ocelot具有路由.请求聚合.服务发现.认证.鉴权.限流熔断等功能,并内置了负载均衡器与S ...

  8. Consul+Ocelot+Polly在.NetCore中使用(.NET5)-网关Ocelot+Consul

    相关文章 Consul+Ocelot+Polly在.NetCore中使用(.NET5)-Consul服务注册,服务发现 Consul+Ocelot+Polly在.NetCore中使用(.NET5)-网 ...

  9. Angularjs,WebAPI 搭建一个简易权限管理系统 —— 基本功能演示(二)

    目录 前言 Angularjs名词与概念 Angularjs 基本功能演示 系统业务与实现 WebAPI项目主体结构 Angularjs 前端主体结构 基本功能演示(二) 非常抱歉这个月实在太忙,一直 ...

随机推荐

  1. Python3.x 基础练习题100例(51-60)

    练习51: 题目: 学习使用 按位与(&) . 分析: 0&0=0; 0&1=0; 1&0=0; 1&1=1. 程序: if __name__ == '__ma ...

  2. 后端程序员之路 28、一个轻量级HTTP Server的实现

    提到http server,一般用到的都是Apache和nginx这样的成熟软件,但是,有的情况下,我们也许也会用一些非常轻量级的http server.http server的c++轻量级实现里,M ...

  3. Docker 一次性进程与对话进程

    目录 一次性进程 对话进程 退出的方法 参考 Docker在运行程序的时候,需要区分运行的程序是一次性进程还是对话进程,不同的进程操作方式有差异. 一次性进程 一些简单进程是不需要交互的,比如hell ...

  4. 解读KMP算法

    前后断断续续搞了5个月,每次都以为自己懂了, 但是要写的时候都不知从何下手,然后又是各种找博客,看帖子,所以这次试着用自己的语言写一个博客. 首先,KMP算法就是从一个模板字符串(S) 中匹配目标字符 ...

  5. 解决springboot项目打成jar包部署到linux服务器后上传图片无法访问的问题

    前言:目前大三,自己也在学习和摸索的阶段.在和学校的同学一起做前后端分离项目的时候,我们发现将后端打包成jar,然后部署到服务器中通过java -jar xxx.jar运行项目以后,项目中存在文件上传 ...

  6. 【Arduino学习笔记06】上拉电阻和下拉电阻

    为什么要用上拉电阻和下拉电阻?--避免输入引脚处于"悬空"状态 下图是一个没有使用上拉电阻/下拉电阻的电路图: 在按键没有按下时,要读取的输入引脚没有连接到任何东西,这种状态就称为 ...

  7. C# 应用 - 封装类访问 Postgresql 数据库

    引入库类 连接数据库 访问数据库 1)增删改数据库 2)查数据库 数据转换 事务 1. 引入库类 引入 Npgsql.dll using Npgsql; using NpgsqlTypes; 2. 连 ...

  8. 题解 CF746D 【Green and Black Tea】

    # 题目分析这道题表面上看上去挺简单,其实仔细研究一下还是值得钻研的.我本人做这道题使用的任然是$ DFS01 $背包.不过呢,与往常背包不同的是,这次递归中需要加许多参数.就数据强度来看,栈问题不大 ...

  9. GreenDao3.2使用详解(增,删,改,查,升级)

    首先看一下效果图: 项目结构如下图所示: 第一步:在build中添加配置如下: projet 目录下的build.gradle dependencies { classpath 'org.greenr ...

  10. 6、MyBatis教程之日志实现

    7.日志实现 思考:我们在测试SQL的时候,要是能够在控制台输出 SQL 的话,是不是就能够有更快的排错效率? 如果一个 数据库相关的操作出现了问题,我们可以根据输出的SQL语句快速排查问题. 对于以 ...