前言

关于网关(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. 第40天学习打卡(静态代理 Lambda表达式 线程状态 线程同步 同步方法)

    静态代理  package com.kuang.demo03; //静态代理模式总结 //真实对象和代理对象都要实现同一个接口 //代理对象要代理真实角色 //好处:  //代理对象可以做很多真实对象 ...

  2. js中数据、内存、变量的概念及三者之间的关系

    目录 数据.内存.变量的概念及三者之间的关系 什么是数据 数据的特点 什么是内存 栈内存 堆内存 JS引擎如何管理内存 什么是变量 变量是普通类型时 变量是引用类型时 数据.内存.变量的三者之间的关系 ...

  3. C++入门(1):计算机组成

    系列文章尽在 | 公众号:lunvey 学习C++之前,我们有必要了解一下计算机的简单组成,毕竟C++是需要操作内存的一门语言.大家或许知道内存是什么,但是内存怎么读取和操作数据以及数据的表现形式会不 ...

  4. 基于Hi3559AV100的视频采集(VDEC-VPSS-VO)整体框图设计

    下面给出基于Hi3559AV100的视频采集整体设计,具体设计将在后续给出: 图形采集端整体设计 Hi3559AV100软件程序按结构划分可分为4层,第一层是硬件驱动层,第二层是操作系统层,第三层是媒 ...

  5. Beego框架学习---layout的使用

    Beego框架学习---layout的使用 在管理系统中,管理菜单的界面是固定的,会变化的只是中间的部分.我就在想,是不是跟angular的"组件模块的router-outlet一样&quo ...

  6. spring 最权威的知识点

    1.Spring是什么? Spring是一个轻量级的IoC和AOP容器框架.是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求.常见的配置方 ...

  7. 用 Numba 加速 Python 代码

    原文出自微信公众号:Python那些事 一.介绍 pip install numba Numba 是 python 的即时(Just-in-time)编译器,即当你调用 python 函数时,你的全部 ...

  8. 王兴:为什么中国的 ToB 企业都活得这么惨?

    本文节选自美团创始人王兴的内部讲话.在讲话中,王兴罕见地分享了他对全球和中国宏观经济的理解,谈了他对 TO B 业务的深度思考. 我们今天讲一下餐饮生态业务部,以及对我们整个公司在整个业务发展过程中的 ...

  9. 通过 Battery Historian 工具分析 Android APP 耗电情况

    电量统计模块概述 Android 从两个层面统计电量的消耗,分别为 软件排行榜 及 硬件排行榜.它们各有自己的耗电榜单,软件排行榜为机器中每个 App 的耗电榜单,硬件排行榜则为各个硬件的耗电榜单.这 ...

  10. 前瞻|Amundsen的数据血缘功能

    目前,Amundsen并不支持表级别和列级别的数据血缘功能,也没有办法展示数据的来龙去脉. 作为Amundsen一项非常核心的功能,Lineage功能早已经提上日程,并进入设计与研发阶段.本位将展示此 ...