本来这篇文章在昨天晚上就能发布的, 悲剧的是写了两三千字的文章居然没保存, 结果我懵逼了. 今天重新来写这篇文章. 今天我们就一起来探讨下如何重写 Ocelot 配置文件的存储方式以及获取方式.
很多人都说配置文件的配置很繁琐, 如果存储在数据库就方便很多, 可以通过自定义 UI 界面在后台进行路由的配置, 然后通过调用 Administration API 让修改后的路由规则立即生效. 当然这都是后话了. 今天就教你手把手的来把配置文件放到数据库中, 然后在数据库中进行路由的配置. 当然, 我会在 GitHub 上开放源代码供大家参考. 至于 Nuget 包的话, 今天还没来得及弄, 等明天晚上弄好, 再发布 Nuget 包吧, 今天先引用下源代码来使用吧. 大家委屈一下吧. 本文还是沿用之前的系列文章里面的 Demo. 所以可以先下载之前系列文章里面的 Demo 源码. https://github.com/yilezhu/OcelotDemo
实例教程集成步骤
GitHub 上下载重写的配置文件的源代码, 地址: 然后把项目文件拷贝到. 系列文章的源代码下面, 并添加项目引用. 如下所示:
项目添加进来后的结构如下所示:
OcelotDemo 网关项目作如下修改, Programs.cs 文件移除对 Ocelot.JSON 文件的引用, 因为配置文件的获取方式已经改成了从数据库中获取, 所以, 你需要新建一个数据库, 然后执行数据库脚本创建数据库表, 这里只给出 Mssql 的数据库脚本, 在项目源代码下面, 大家自行下载.
ConfigureServices 服务中 Ocelot 的注入的同时需要注入我们的扩展方法, 如下所示:
- services.AddOcelot()// 注入 Ocelot 服务
- .AddAuthLimitCache(option=> {
- option.DbConnectionStrings = "Server=.;Database=Ocelot;User ID=sa;Password=1;";
- })
- .AddConsul();
注意: 这里需要传入 SqlServer 的数据库连接字符串, 由于博主扩展使用的 Dapper+MSSQL 所以这里需要传入步骤 2 中创建的数据库的链接字符串.
我们在数据库中配置一个路由吧, 如下所示: 字段名称基本都是跟 Ocelot 原生配置名称一样, 只是扩展了一些字段方便后期做限流的
大家看到没有, 这条路由的意思是接受 / ss1/{通配符} 的路由, 然后转到到下面就是 / API/{通配符} .
路由配置好了, 那就让我们启动一下项目看下效果吧.
上面是正常的访问结果, 当我们访问一个错误的路由的时候, 再看看吧.
看到没有, 返回了 404 的状态码, 感觉不够友好, 所以, 我们也进行了改造. 直接看结果吧
为了看到效果, 你需要在 Configure 中少做下修改
App.UseAhphOcelot().Wait();
然后我们重新启动下 Ocelot 网关项目, 重新访问下 6 中的 Url 吧.
看到没有, 返回的数据更友好, 而且是 200 的状态. 当然大家也可以忽略这个功能哈.
源码地址:
Demo 地址: https://github.com/yilezhu/OcelotDemo
扩展插件地址:
总结
本文主要通过实例讲述如何集成, 将配置文件存储到数据库的插件. 源码已经开源, 今天暂时没有发布 Nuget 包, 明天再发布吧. 当然你可以自行扩展代码. 实现你自己的业务. 我把配置文件存储到数据库的目的就是方便后面做 UI 管理方便, 还有就是可以基于这些路由在数据库中对每个客户端进行单独的限流. 最后感谢大家的阅读.
Ocelot 简易教程目录
Ocelot 简易教程 (一) 之 Ocelot 是什么
Ocelot 简易教程 (二) 之快速开始 1
Ocelot 简易教程 (二) 之快速开始 2
Ocelot 简易教程 (三) 之主要特性及路由详解
Ocelot 简易教程 (四) 之请求聚合以及服务发现
Ocelot 简易教程 (五) 之集成 IdentityServer 认证以及授权
来源: https://www.cnblogs.com/yilezhu/p/9839863.html