网关Ocelot功能演示完结,久等了~~~

前言

关于网关(Ocelot)的分享,还遗留一些功能没演示呢,接着来聊聊;这次重点针对网关Ocelot使用缓存、集成Polly做服务治理、集成IdentityServer4做认证授权来详细说说;如果对上一篇感兴趣,点这里(网关Ocelot功能演示安排的明明白白~~~)。

正文

1. 使用缓存

Ocelot中的缓存是对下游请求结果进行缓存处理,多次请求下游API时,在有效期内就可以从缓存中获取,提升服务性能。

以下演示代码还是接着上一次代码举例的,代码地址为:https://github.com/zyq025/IDS4Demo/tree/main/OcelotDemo/OcelotCodeDemo

1.1 使用默认内存缓存

其实只要增加下面红框部分的配置,就可以使用缓存了,如下:

image

配置说明:

  • TtlSeconds:配置有效期的时间,单位为秒;

  • Region:区域名,即分区缓存数据;Oeclot可以提供缓存管理接口,然后指定区域清除缓存;其实就是在Ocelot那里增加相关接口管理缓存;

配置文件准备好了,在ServiceAPI1中新增一个测试接口,如下:

image

运行网关和ServiceAPI1项目,然后根据配置的路由规则访问新增的接口:

image

到这有小伙伴会好奇,什么缓存操作都没做,就一个简单的配置就行了? 是的,Ocelot默认是有内存缓存实现的,老版本的InMemoryCache是通过Dictionary来实现的,就是键值对存储;新版本的是AspMemoryCache是通过IMemoryCache来实现的;所以只要配置开启就可以用啦,只不过功能比较单一,但可以集成其他扩展缓存,当然也可以自定义。

1.2 集成CacheManager做缓存

CacheManager除了缓存管理外,还封装了很多功能,如事件、性能计数器、并发更新等,让开发人员更容易处理和配置缓存。这里主要演示如何集成到Ocelot使用,就不详细展开说明啦,详解请查阅官网:https://cachemanager.michaco.net/documentation

Ocelot中集成CacheManager非常简单,简单小三步:

  • 引入Ocelot.Cache.CacheManager包;

  • 注册对应的服务;

    image
  • 添加配置文件,其实就是配置FileCacheOptions,上一小节已经使用啦;

    image

    这样就完成集成了,运行网关和服务接口,然后访问,同样是每隔十秒才能重新获取值; 基于内存的使用是不是很简单,分布式访问咋办? 可不可以用Redis或者其他方式存储,答案当然是肯定的,往下看看↓↓↓

1.3 集成CacheManager配合Redis做分布式缓存

首先得安装好Redis环境,这块我就不展开啦,如果小伙伴对Redis系列感兴趣,也有专门的文章进行分享,进入Redis系列

  • 引入对应包,增加Redis相关配置即可,如下:

    image-20210425170300577
  • 运行网关和服务接口,访问,同样也是每隔10秒才能获取新值,不过这次不一样的是数据在Redis中存储啦,结果如下:

    image-20210425151920536
1.4 自定义缓存

自定义缓存通过继承接口IOcelotCache,然后注册到容器即可,So easy!!!

  • 自定义一个缓存类,继承IOcelotCache接口;

    image-20210426143820535
  • 将缓存类注册到容器中;

    image-20210426143935784
  • 运行看结果,还是用之前上面配置文件的FileCacheOptions信息:

    image-20210426145331418

如果没有特别定制化的需求,用现成造好的轮子也是很不错的。

2. 集成Polly做服务治理

在WebAPI中,接口超时、访问异常、并发量大等这种问题已经是家常便饭了,故障处理和弹性预防肯定少不了,上一节专门分享了一下Polly,这里就可以很丝滑般的集成进来啦,关于Polly的分享,请进入Polly-故障处理和弹性应对很有一手查看详情。

Ocelot集成Polly超级给力,引入包,注册服务,剩下的功能通过配置文件配置就轻松实现~~~

  • 引入包,注册服务

    image-20210426151206131
  • 超时熔断配置实现

    为了方便测试,在ServiceAPI1中增加一个TimeoutTest的接口,如下:

    image-20210426153031768

    然后配置超时熔断,然后运行,通过网关访问接口:

    image-20210426152940899

    通过上面演示,如果超时,不让请求一直处于等待,及时反馈信息;Ocelot默认超时时间为90s。同时上面还配置了熔断机制,如果出现3次异常,就会熔断3秒。

  • 限流配置实现,这里就用ServiceAPI1中CacheTest接口做演示

    image-20210426163155144

    当达到最大请求时,可以自定义返回消息和状态码,只需要全局配置中增加如下配置即可:

    image-20210426162735269

    运行效果如下:

    image-20210426160312818

3. 集成IdentityServer4做认证授权

认证授权在API项目中是不可缺少的,而对于微服务项目,每一个服务都做一次验证,显得冗余,而且后期代码维护性也不好,所以找一个公共的入口统一做认证是很不错的解决方案,而在网关上集成认证授权功能完全符合条件。

关于IdentityServer4的相关知识,之前做过几篇文章的分享,小伙伴可以进入IdentityServer4系列详细查看,这里不展开讲,重点还是演示Ocelot如何集成IdentityServer4;步骤如下:

  • 准备一个IdentitiServer4的项目

    为了不喧宾夺主,这里就直接用之前IdentityServer4 之Client Credentials走起来这篇文章中的AuthorizationServerDemo项目代码,github源码路径是:https://github.com/zyq025/IDS4Demo。直接拷过来即可。

  • Ocelot项目中增加认证逻辑

    image-20210427161101292
  • 修改配置文件

    image-20210427161308610

    配置认证信息可以针对路由进行配置,其中AuthenticationProviderKey对应的值与网关项目中注册服务定义的authenticationProviderKey值一致。 如果配置了认证信息,就会经过授权服务器进行认证校验,否则不进行验证。

  • 运行结果如下:

    image-20210427161925028

    通过上图,对应的API被保护起来啦!那试试获取一个Token,带上Token访问需认证的API地址,看看能否问;为了演示方便,这里要用到Postman工具啦,如下:

    image-20210427162235681

    上面已经获取到Token,如果小伙伴有疑惑,可以去看看之前IDS4的文章。 将得到的Token放在请求头中去访问需认证的API地址,如下:

    image-20210427162705433

    最后可以正常访问接口啦,统一在网关做共同的逻辑,避免各服务的功能实现冗余,在后期维护和替换也很方便。

源码地址:https://github.com/zyq025/IDS4Demo,统一放在这里面了。

总结

到这Ocelot的常用功能已经演示完毕了,这些示例只是提供思路,具体应用还需要小伙伴花点心思结合需求进行落地。

下一步的安排继续聊聊服务之间的调用分布式最终一致性等开发应用,还会集成一些中间件进行日志监控和分析及链路追踪,对于部署还会系列的分享Nignx、Docker、K8s

一个被程序搞丑的帅小伙,关注"Code综艺圈",跟我一起学~~~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,492评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,048评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,927评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,293评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,309评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,024评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,638评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,546评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,073评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,188评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,321评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,998评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,678评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,186评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,303评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,663评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,330评论 2 358

推荐阅读更多精彩内容