当前位置: 首页 > news >正文

阿里巴巴国际站怎么注册express wordpress

阿里巴巴国际站怎么注册,express wordpress,工程软件专业,分销商城有哪些本篇将介绍如何扩展Ocelot中间件实现自定义网关#xff0c;并使用2种不同数据库来演示Ocelot配置信息存储和动态更新功能#xff0c;内容也是从实际设计出发来编写我们自己的中间件#xff0c;本文内容涵盖设计思想内容和代码内容#xff0c;我希望园友们最好跟着我这个文章… 本篇将介绍如何扩展Ocelot中间件实现自定义网关并使用2种不同数据库来演示Ocelot配置信息存储和动态更新功能内容也是从实际设计出发来编写我们自己的中间件本文内容涵盖设计思想内容和代码内容我希望园友们最好跟着我这个文章的思路先理解好后再看源代码这样有利于融会贯通本篇的文档及源码将会在GitHub上开源每篇的源代码我将用分支的方式管理本篇使用的分支为course1。附文档及源码下载地址[https://github.com/jinyancao/CtrAuthPlatform/tree/course1]一、数据库设计上一篇中我们介绍了Ocelot中要满足我们需求我们需要把配置信息转到数据库存储今天我们就从数据库设计开始数据库设计我采用的是PowerDesigner,首先打开软件新建一个概念模型。根据Ocelot的配置文件我们可以发现配置信息由全局配置信息和路由信息组成这时候我们可以设计表结构如下为了满足后续多个路由的切换增加了网关和路由多对多关系以后我们可以随时根据不同规则切换详细的表字段可以自行根据Ocelot配置文档和设计文档对照查看这里我移除了限流的字段因为我们后续需要自定义限流用不上原来的方法。生成物理模型数据库设计好后我们需要把概念模型转成物理模型使用CtrlShiftP快捷键我们默认使用MSSQL2008R2实现配置存储所有在弹出的对话框中选择然后点击确认后会自动生成MSSQL2008R2的物理模型可以看到数据类型和表之间的关连关系都生成好了奈斯一切都是那么完美如果主键为自增类型手动标记下即可。现在我们需要生成我们创建数据库的SQL脚本了别忘了保存下刚才生成的物理模型因为以后还需要用到。生成数据库脚本如图所示可以使用快捷键CtrlG生成数据库脚本点击确认生成并保存然后把生成的脚本在我们新建的数据库里执行这样我们的数据库就设计完成了。二、搭建并测试中间件我们使用VS2017新建一个.NETCORE2.1项目,然后新建一个类库来实现我们Ocelot定制版中间件建好后项目结构如下现在开始我们第一个AhphOcelot定制中间件编写。首先我们回顾下【.NET Core项目实战-统一认证平台】第二章网关篇-重构Ocelot来满足需求的源码解析关于配置信息的读取如下我们只需要重写下CreateConfiguration方法实现从数据库里取就可以了既然有思路了public static async TaskIApplicationBuilder UseOcelot(this IApplicationBuilder builder, OcelotPipelineConfiguration pipelineConfiguration){  //创建配置信息var configuration await CreateConfiguration(builder);ConfigureDiagnosticListener(builder);    return CreateOcelotPipeline(builder, pipelineConfiguration); }那就开始改造吧我们新建一个Ctr.AhphOcelot类库来实现这个中间件首先新建自定义中间件扩展这个扩展是在原有的Ocelot的基础上进行改造所以需要先在Nuget中安装Ocelot这系列课程我们以最新的Ocelot 12.0.1版本进行扩展。首先我们要了解Ocelot的配置信息是怎么加载进来的呢查看源码后发现是是从OcelotBuilder加载的配置文件,也就是最早的AddOcelot()方法时注入的。现在我们要实现从数据库提取配置信息可以查看下Ocelot是否给我们提供了相关扩展接口通过CtrlF查找FileConfiguration实体在哪些地方可以返回IFileConfigurationRepository接口一眼就能认出配置文件仓储类我们可以重写这个接口实现即可完成配置文件从数据库提取果然Ocelot是为定制而生其实如果没有这个接口问题也不大我们自己去定义和实现这个接口也一样可以完成。我们看看这个接口是否有默认实现DiskFileConfigurationRepository方法实现了这个接口通过名称就知道是直接从配置文件提取配置信息再看下这个接口应用到哪里继续CtrlF找到FileConfigurationPoller和FileAndInternalConfigurationSetter两个地方用到了这个接口其中FileConfigurationPoller实现了IHostedService后台任务我们不难看出这个是一个定时更新任务实际我们配置信息变更肯定由管理员自己修改测试无误后发起这里我们用不上但是实现思路可以了解下。FileAndInternalConfigurationSetter是配置文件更新方法这里我们如果使用数据库存储更新肯定由我们自己管理界面更新所以也用不上这时有人会问那如果配置文件发生变更了我们怎么去更新。这时候我们需要了解配置信息在哪里使用是否使用了缓存。其实上面也给出了答案就是IInternalConfiguration.// now create the configvar internalConfigCreator builder.ApplicationServices.GetServiceIInternalConfigurationCreator();var internalConfig await internalConfigCreator.Create(fileConfig.CurrentValue);现在问题都梳理清楚了现在我们实现的思路就是首先通过数据库实现IFileConfigurationRepository接口内容更新不需要实现前面说过了然后再我们数据库里修改了配置更新IInternalConfiguration配置信息即可完成我们的自定义任何地方的存储。开发的思路就是顶层开始一步一步往下实现最后完成我们的扩展。现在回到我们自己的代码修改配置信息代码如下是不是精简很多了但是有2个问题未解决一是需要实现IFileConfigurationRepository二是还没实现动态更新。1、实现IFileConfigurationRepository接口本系列所有课程都是基于轻量级的ORM框架dapper实现首先需要NuGet包里添加Dapper,然后我们需要把设计的表生成实体至于如何生成这里就不介绍了实现方式很多相关的帖子很多。使用Dapper时我们需要知道知道连接方式这时需要在中间件的基础上扩充一个配置文件接收配置数据这样我们才能使用配置的信息内容。现在可以实现接口了详细代码如下,代码很简单就是从数据库查询出录入的内容使用dapper实现。现在又延伸出两个问题.第一个是AhphOcelotConfiguration这个信息从哪读取的第二是SqlServerFileConfigurationRepository在哪注入。其实读过我前面中间件源码解析的同学可能已经知道了就是在AddOcelot里注入的现在我们就可以使用相同的方式实现自己的扩展。添加自己的ServiceCollectionExtensions扩展。有木有很简单呢到这里从数据库中提取配置信息都完成啦现在我们开始来测试下看是否满足了我们的需求。新建一个Ctr.AuthPlatform.Gateway网关项目添加我们的中间件项目引用修改Startup.cs代码如下就实现了自定义的网关是不是很优雅呢但是是否达到了我们预期的网关效果了我们来直接从数据库里插入测试数据并新建一个测试项目。测试数据脚本如下测试项目结构如下就是默认的一个api项目修改下启动端口为9000。为了方便调试.NETCORE项目我建议使用dotnet run方式分别启动网关(7777端口)和测试服务(9999端口)。优先启动网关项目想一想还有点小激动呢开始运行项目纳尼尽然报错而且是熟悉的未将对象引用到实例化错误根据异常内容可以看到是在验证的时候报错我们可以查看下Ocelot对应的源代码发现问题所在了。我们在一些未定义的配置项目使用了为空的赋值。而Ocleot里面对于不少配置项目未做非空验证。比如RateLimitOptionsCreator对于FileGlobalConfiguration未做非空验证类似这样的地方还有不少我希望下次Ocelot更新时最好增加这类非空验证这样便于自定义扩展而Ocelot内部实现了默认实例化所以我们之前从数据库取值赋值时写法需要改进修改后的代码如下。然后重新运行网关启动成功。接着我们启动我们测试的服务然后浏览器先访问http://localhost:9000/api/values地址测试地址正常访问。然后使用测试网关路由地址访问http://localhost:7777/ctr/values,显示内容和本地访问一样证明网关路由生效是不是有点小激动呢我们完成了从配置信息中取网关路由信息扩展。三、下篇预告最后我们回顾下这篇内容我是从设计到实现一步一步讲解和实现的而且实现过程是根据需求慢慢剖析再局部实现的我发现现在很多人在平时学习基本都是结果未导向很少去关心中间的实现过程久而久之基本就会丧失解决问题的思路写的这么详细也是希望给大家一个解决问题的思路目前我们实现了从数据库中提取配置信息并在网关中生效但是还未实现动态更新和扩展其他数据库存储大家也可以先自己尝试如何实现。下一篇我们将会实现网关路由的动态更新会提供几种更新思路根据实际情况择优选择。然后在使用Mysql数据库来存储配置信息并扩展此网关实现很优雅的配置为什么使用mysql扩展实现呢因为.netcore已经跨平台啦后期我们准备在Centos下实现容器化部署这时我们就准备以mysql为例进行讲解本网关所有内容源码都会实现sqlserver和mysql两种方式其他存储方式可自行扩展即可。最后项目所有的文档在源码的文档目录文档按照课程源码文件夹区分本文的文档标识course1相关文章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来满足需求原文地址: https://www.cnblogs.com/jackcao/p/9942561.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com
http://www.pierceye.com/news/937921/

相关文章:

  • 男男做暧网站免费网站建设期末论文
  • 电子政务门户网站建设wordpress 导入
  • 江苏建设监理协会网站网站建设siteserver
  • 家庭做网站做网站服务器可以挂到外地么
  • 做相册的网站 网易wordpress云服务器
  • 国内网站没备案自己做外贸购物网站
  • 国外h5网站模板下载长沙快速建站模板
  • 湛江网站建设方案找工程项目
  • 孝感住房和城乡建设部网站深圳市做网站公司
  • 网站开发环境配置做一个信息网站多少钱
  • 小企业网站建设的小知识wordpress显示关闭评论框
  • vue.js 可以做网站吗注册一个公司一年费用
  • 软件开发网站策划方案百度网站怎么用
  • 网站分页符素材wordpress自定义密码
  • 建设银行公积金预约网站首页大宗商品交易平台政策
  • 口碑好的秦皇岛网站建设哪里有沙漠网站建设
  • 推荐外贸网站建设的公司聊城做网站费用价格
  • 在线设计的网站android 网站开发
  • 河北省建设厅网站官网织梦手机网站制作
  • 网站建设管理物联网的发展前景
  • 广州网站建设外贸做vip视频网站赚钱吗
  • 模板网建站山西 网站制作
  • 网站建设捌金手指花总二七网页制作与设计的内容
  • 阿凡达网站建设网网络营销包括什么内容
  • 网站设计师是什么做的好的国外网站
  • 19年做网站织梦cms源码
  • 做定制网站怎么样原创网站设计
  • 淮安网站建设 淮安网站制作反向代理wordpress
  • 七台河北京网站建设深圳营销策划
  • 陕西西乡网站建设如何做网站效果图