建设银行社保网站,免费做长图网站,台州模板建站代理,网页游戏网站手机上篇文章我们介绍了如何扩展Ocelot网关#xff0c;并实现数据库存储#xff0c;然后测试了网关的路由功能#xff0c;一切都是那么顺利#xff0c;但是有一个问题未解决#xff0c;就是如果网关配置信息发生变更时如何生效#xff1f;以及我使用其他数据库存储如何快速实… 上篇文章我们介绍了如何扩展Ocelot网关并实现数据库存储然后测试了网关的路由功能一切都是那么顺利但是有一个问题未解决就是如果网关配置信息发生变更时如何生效以及我使用其他数据库存储如何快速实现本篇就这两个问题展开讲解用到的文档及源码将会在GitHub上开源每篇的源代码我将用分支的方式管理本篇使用的分支为course2。附文档及源码下载地址[https://github.com/jinyancao/CtrAuthPlatform/tree/course2]一、实现动态更新路由上一篇我们实现了网关的配置信息从数据库中提取项目发布时可以把我们已有的网关配置都设置好并启动但是正式项目运行时网关配置信息随时都有可能发生变更那如何在不影响项目使用的基础上来更新配置信息呢这篇我将介绍2种方式来实现网关的动态更新一是后台服务定期提取最新的网关配置信息更新网关配置二是网关对外提供安全接口由我们需要更新时调用此接口进行更新下面就这两种方式我们来看下如何实现。1、定时服务方式网关的灵活性是设计时必须考虑的实现定时服务的方式我们需要配置是否开启和更新周期所以我们需要扩展配置类AhphOcelotConfiguration增加是否启用服务和更新周期2个字段。配置文件定义完成那如何完成后台任务随着项目启动而一起启动呢IHostedService接口了解一下我们可以通过实现这个接口来完成我们后台任务然后通过Ioc容器注入即可。新建DbConfigurationPoller类实现IHostedService接口详细代码如下。项目代码很清晰就是项目启动时判断配置文件是否开启定时任务如果开启就根据启动定时任务去从数据库中提取最新的配置信息然后更新到内部配置并生效停止时关闭并释放定时器然后再注册后台服务。//注册后端服务
builder.Services.AddHostedServiceDbConfigurationPoller();现在我们启动网关项目和测试服务项目配置网关启用定时器代码如下。启动后使用网关地址访问http://localhost:7777/ctr/values,可以得到正确地址。然后我们在数据库执行网关路由修改命令等10秒后再刷新页面发现原来的路由失效新的路由成功。UPDATE AhphReRoute SET UpstreamPathTemplate/cjy/values where ReRouteId1看到这个结果是不是很激动只要稍微改造下我们的网关项目就实现了网关配置信息的自动更新功能剩下的就是根据我们项目后台管理界面配置好具体的网关信息即可。2、接口更新的方式对于良好的网关设计我们应该是可以随时控制网关启用哪种配置信息这时我们就需要把网关的更新以接口的形式对外进行暴露然后后台管理界面在我们配置好网关相关信息后主动发起配置更新并记录操作日志。我们再回顾下Ocelot源码看是否帮我们实现了这个接口查找法CtrlF搜索看有哪些地方注入了IFileConfigurationRepository这个接口惊喜的发现有个FileConfigurationController控制器已经实现了网关配置信息预览和更新的相关方法查看源码可以发现代码很简单跟我们之前写的更新方式一模一样那我们如何使用这个方法呢从源码中可以发现控制器中增加了授权访问防止非法请求来修改网关配置Ocelot源码经过升级后把不同的功能进行模块化进一步增强项目的可配置性减少冗余管理源码被移到了Ocelot.Administration里详细的源码也就5个文件组成代码比较简单就不单独讲解了就是配置管理接口地址并使用IdentityServcer4进行认证正好也符合我们我们项目的技术路线为了把网关配置接口和网关使用接口区分我们需要配置不同的Scope进行区分由于本篇使用的IdentityServer4会在后续篇幅有完整介绍本篇就直接列出实现代码不做详细的介绍。现在开始改造我们的网关代码来集成后台管理接口然后测试通过授权接口更改配置信息且立即生效。注意由于Ocelot.Administration扩展使用的是OcelotMiddlewareConfigurationDelegate中间件配置委托所以我们扩展中间件AhphOcelotMiddlewareExtensions需要增加扩展代码来应用此委托。新建IdeitityServer认证服务并配置服务端口6666并添加二个测试客户端一个设置访问scope为gateway_admin另外一个设置为其他来分别测试认证效果。配置好认证服务器后我们使用PostMan来测试接口调用首先使用有权限的client2客户端获取access_token,然后使用此access_token访问网关配置接口。访问http://localhost:7777/CtrOcelot/configuration可以得到我们数据库配置的结果。我们再使用POST的方式修改配置信息使用PostMan测试如下请求后返回状态200成功然后测试修改前和修改后路由地址发现立即生效,可以分别访问http://localhost:7777/cjy/values和http://localhost:7777/cjy/values验证即可。然后使用client1获取access_token,请求配置地址提示401未授权为预期结果达到我们最终目的。到此我们网关就实现了2个方式更新配置信息大家可以根据实际项目的情况从中选择适合自己的一种方式使用即可。二、实现其他数据库扩展以MySql为例我们实际项目应用过程中经常会根据不同的项目类型选择不同的数据库这时网关也要配合项目需求来适应不同数据库的切换本节就以mysql为例讲解下我们的扩展网关怎么实现数据库的切换及应用如果有其他数据库使用需求可以根据本节内容进行扩展。在【.NET Core项目实战-统一认证平台】第三章 网关篇-数据库存储配置信息1中介绍了网关的数据库初步设计里面有我的设计的概念模型现在使用mysql数据库直接生成mysql的物理模型然后生成数据库脚本详细的生成方式请见上一篇一秒搞定。是不是有点小激动原来可以这么方便。新建MySqlFileConfigurationRepository实现IFileConfigurationRepository接口需要NuGet中添加MySql.Data.EntityFrameworkCore。实现代码后如何扩展到我们的网关里呢只需要在注入时增加一个扩展即可。在ServiceCollectionExtensions类中增加如下代码。最后把mysql数据库插入sqlserver一样的路由测试信息然后启动测试可以得到我们预期的结果。为了方便大家测试附mysql插入测试数据脚本如下。如果想扩展其他数据库实现直接参照此源码即可。三、回顾与预告本篇我们介绍了2种动态更新配置文件的方法实现访问不同各有利弊正式使用时可以就实际情况选择即可都能达到我们的预期目标也介绍了Ocelot扩展组件的使用和IdentityServer4的基础入门信息。然后又扩展了我们mysql数据库的存储方式增加到了我们网关的扩展里随时可以根据项目实际情况进行切换。网关的存储篇已经全部介绍完毕有兴趣的同学可以在此基础上继续拓展其他需求下一篇我们将介绍使用redis来重写Ocelot里的所有缓存为我们后续的网关应用打下基础。相关文章AspNetCore中使用Ocelot之 IdentityServer4Ocelot-基于.NET Core的开源网关实现.NET Core微服务之基于OcelotIdentityServer实现统一验证与授权Swagger如何访问Ocelot中带权限验证的APIOcelot.JwtAuthorize一个基于网关的Jwt验证包.NET Core微服务之基于Ocelot实现API网关服务.NET Core微服务之基于Ocelot实现API网关服务续.NET微服务体系结构中为什么使用Ocelot实现API网关Ocelot简易教程一之Ocelot是什么Ocelot简易教程二之快速开始1Ocelot简易教程二之快速开始2Ocelot简易教程三之主要特性及路由详解Ocelot简易教程四之请求聚合以及服务发现Ocelot简易教程五之集成IdentityServer认证以及授权Ocelot简易教程六之重写配置文件存储方式并优化响应数据Ocelot简易教程七之配置文件数据库存储插件源码解析ASP.NET Core中Ocelot的使用API网关的应用ASP.NET Core中Ocelot的使用基于Spring Cloud Netflix Eureka的动态路由ASP.NET Core中Ocelot的使用基于服务发现的负载均衡【.NET Core项目实战-统一认证平台】第一章 功能及架构分析定制Ocelot来满足需求【.NET Core项目实战-统一认证平台】第三章 网关篇-数据库存储配置1原文地址: http://www.cnblogs.com/jackcao/p/9950305.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com