网关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相关配置即可,如下:

    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综艺圈",跟我一起学~~~

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/302868.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数学课本上的几大变态

数学课本上的几大变态数据与算法之美用数据解决不可能长按扫码关注

牛逼顿的一生:当智商高到一定程度,情商就不重要了

牛顿老师在科学圈里曾经很有权势,被女王封了爵位成了贵族,人称牛爵爷,官至皇家造币局局长兼皇家学会会长。如果阿尔伯特没有辞了以色列总统的话和他有一拼。说他有权势并不仅是官大,主要是贡献大。如果17世纪就有诺贝尔奖的话&…

趣味图解+源码分析,轻松吃透Linux

如今的软件开发行业,服务器端市场基本被 Linux 系统占领了。移动端中的 Android 系统是基于 Linux 内核开发的,那些很火的虚拟化、消息队列、云计算、大数据等技术,都默认支持 Linux 操作系统。而对软件工程师来说,也几乎一定会遇…

java 发送tcp_Java TCP发送与接收

IP地址?端口号?主机名?什么是Socket?什么是UDP?什么是TCP?UDP和TCP区别?以上问题请自行百度,有标准解释,此处不再赘述,直接上干货!实例:发送端&a…

从零维到十维空间

事情是这样的,这周我给学生讲3dmax的课。为了让学生了解三视图我就顺便科普了一下什么是零维、一维、二维、三维空间。讲完不过瘾,感觉一支粉笔一块黑板讲维度是一件很爽的事情,那么.........接下来请同学们打开脑洞,看我用一支笔…

如何更好使用多线程

说到线程相信很多开发人员都会认为只要使用了多线程技术服务性能就会提高很多,但涉及过渡使用问题就很少人去了解。在使用上更多是了解是创建,使用,销毁或使用线程池之类的。但这些资料更多是如何使用线程,但对于应用怎样针对性规…

前端又一本升级版图书上市了,听说比第一版还好看

哇!听说《Node.js实战(第2版)》来了?没错!这本让读者久等了的书,终于上市啦!最近的升级版图书还是很多的,但是小伙伴对这本的期待值依旧不减!毕竟第一版在豆瓣上获得了 8…

人气TOP|当红炸子鸡「小明机器人」,出道走花路啦

在全球新一轮技术革命的时代背景下,越来越多的企业走上了数字化之路。伴随着企业对数字化转型的持续关注,各行各业对“数字化员工”即RPA(机器人流程自动化,Robotic Process Automation)的需求也越发旺盛,都…

MFC和Win32之三___CGdiObject类和windows Gdi对象

小结: 前面讲到的windows窗口对象,在windows下用句柄来代表之,并且用了一个数据结构WNDCLASS(窗口类)来描述之。同理,windows的Gdi对象也有一些句柄来代表之(比如hPen等)&#xff0c…

java io流 教程_Java基础教程:IO流与文件基础

Java:IO流与文件基础说明:本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦。走进流什么是流流:指的是从源到目的地的字节的有序序列。在Java中,可以从其中读取一个字节序列的对象称作 输入流,…

用数学模型向你解释离婚

A Mathematical Model of Sentimental Dynamics Accounting for Marital Dissolution解释离婚的情感动力学数学模型背景西方社会的离婚是普遍存在的。它提出了重大的科学和社会学问题,不管是理论上还是解决方式上。学者和问题处理专家认为存在一种情感关系热力学第二…

记一次 .NET医疗布草API程序 内存暴涨分析

一:背景 1. 讲故事我在年前写过一篇关于CPU爆高的分析文章 再记一次 应用服务器 CPU 暴高事故分析 ,当时是给同济做项目升级,看过那篇文章的朋友应该知道,最后的结论是运维人员错误的将 IIS 应用程序池设成 32bit 导致了事故的发生…

自已做的第一个autoconf程序(不断完善中)

2019独角兽企业重金招聘Python工程师标准>>> 1、先写个简单的main函数,并按如下目录结构存放: timesync-- |--conf |--include |--lib |--src 2、在最上层目录下,执行autoscan,生成configure.scan,并改名为…

轻松看懂机器学习十大常用算法

通过本篇文章大家可以对ML的常用算法形成常识性的认识。没有代码,没有复杂的理论推导,仅是图解,介绍这些算法是什么以及如何应用(例子主要是分类问题)。以后有机会再对单个算法做深入地解析。今天的算法如下&#xff1…

MATLAB常用算法与应用实例分享来袭!

小天从大学开始接触数学建模,便开启资料收集功能。经过近几年的积累和沉淀,再加上对数学建模领域的深入研究,收集整理了丰富的数学建模资料,内容涵盖“MATLAB常用算法”,“MATLAB算法应用实例”等。截止到今天&#xf…

4个终于被破译的世界级密码

全世界有3.14 % 的人已经关注了数据与算法之美很多时候,一个设计精巧的密码就像数学难题一样,许许多多难以破解的密码让人青丝泛白,至今仍未见天日。不过,也有一些密码中的幸运儿,最终仍然迎来了真相大白的那天。秘密组…

java虚拟机工作原理图_Java虚拟机工作原理

首先我想从宏观上介绍一下Java虚拟机的工作原理。从最初的我们编写的Java源文件(.java文件)是如何一步步执行的,如下图所示,首先Java源文件经过前端编译器(javac或ECJ)将.java文件编译为Java字节码文件,然后JRE加载Java字节码文件&#xff0c…

奇异值的物理意义是什么?

全世界有3.14 % 的人已经关注了数据与算法之美矩阵奇异值的物理意义是什么?或者说,奇异值形象一点的意义是什么?把m*n矩阵看作从m维空间到n维空间的一个线性映射,是否:各奇异向量就是坐标轴,奇异值就是对应…

WPF使用Animation仿WeChat(微信)播放语音消息

WPF开发者QQ群: 340500857 前言WPF使用Animation仿WeChat(微信)播放语音消息?效果图:创建MyAnimationForever.cs如下:public class MyAnimationForever : Control{private static Storyboard MyStory;priva…

epublib java_使用Epublib处理epub文件 | 学步园

通过wlw发布在我的博客funba.cn希望csdn能重新支持wlwEpublib是一个用于处理epub文件的java类库,可以对epub文件进行读写处理;而且提供了一个阅读器,可以直接运行(java -jar 方式),并可以打开epub类型的文件进行阅读。1、这个例子…