资源准备:

下载开源项目

新建oracle表:

-- ----------------------------
-- Table structure for OcelotGlobalConfiguration
-- ----------------------------CREATE TABLE OcelotGlobalConfiguration (Id NUMBER(11) NOT NULL ,GatewayName NVARCHAR2(200) NOT NULL ,RequestIdKey NVARCHAR2(100) ,BaseUrl NVARCHAR2(100) ,DownstreamScheme NVARCHAR2(50) ,ServiceDiscoveryProvider NVARCHAR2(300) ,QoSOptions NVARCHAR2(300) ,LoadBalancerOptions NVARCHAR2(300) ,HttpHandlerOptions NVARCHAR2(300) ,LastUpdateTime DATE ,AddTime DATE NOT NULL ,IsDefault NUMBER(4) NOT NULL
)
;
COMMENT ON COLUMN OcelotGlobalConfiguration.Id IS '主键';
COMMENT ON COLUMN OcelotGlobalConfiguration.GatewayName IS '网关名称';
COMMENT ON COLUMN OcelotGlobalConfiguration.AddTime IS '添加时间';
COMMENT ON COLUMN OcelotGlobalConfiguration.IsDefault IS '是否默认';-- ----------------------------
-- Records of OcelotGlobalConfiguration
-- ----------------------------
INSERT INTO OcelotGlobalConfiguration VALUES ('1', '第一个网关', 'FirstGateway', '', '', '', '', '', '', TO_DATE('1900-01-01 00:00:00.000', 'SYYYY-MM-DD HH24:MI:SS'), TO_DATE('2018-10-22 18:06:22.337', 'SYYYY-MM-DD HH24:MI:SS'), '1');
COMMIT;-- ----------------------------
-- Table structure for OcelotReRoutes
-- ----------------------------CREATE TABLE OcelotReRoutes (Id NUMBER(11) NOT NULL ,OcelotGlobalConfigurationId NUMBER(11) NOT NULL ,UpstreamPathTemplate NVARCHAR2(150) NOT NULL ,UpstreamHttpMethod NVARCHAR2(50) NOT NULL ,UpstreamHost NVARCHAR2(100) NOT NULL ,DownstreamScheme NVARCHAR2(50) ,DownstreamPathTemplate NVARCHAR2(200) ,DownstreamHostAndPorts NVARCHAR2(500) ,AuthenticationOptions NVARCHAR2(300) ,RequestIdKey NVARCHAR2(100) ,CacheOptions NVARCHAR2(200) ,ServiceName NVARCHAR2(100) ,QoSOptions NVARCHAR2(200) ,LoadBalancerOptions NVARCHAR2(200) ,Key NVARCHAR2(100) ,DelegatingHandlers NVARCHAR2(200) ,Priority NUMBER(11) ,Timeout NUMBER(11) ,IsStatus NUMBER(11) NOT NULL ,AddTime DATE NOT NULL
)
;
COMMENT ON COLUMN OcelotReRoutes.Id IS '主键';
COMMENT ON COLUMN OcelotReRoutes.OcelotGlobalConfigurationId IS '全局配置ID';
COMMENT ON COLUMN OcelotReRoutes.AddTime IS '添加时间';-- ----------------------------
-- Records of OcelotReRoutes
-- ----------------------------
INSERT INTO OcelotReRoutes VALUES ('1', '1', '/connect/token', '[ "POST","GET" ]', ' ', 'http', '/connect/token', '[{"Host": "localhost","Port": "5003" }]', '', '', '', '', '', '', '', '', '0', NULL, '1', TO_DATE('2018-10-22', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO OcelotReRoutes VALUES ('2', '1', '/connect/authorize', '[ "POST","GET" ]', ' ', 'http', '/connect/authorize', '[{"Host": "localhost","Port": "5003" }]', '', '', '', '', '', '', '', '', '0', NULL, '1', TO_DATE('2018-10-22', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO OcelotReRoutes VALUES ('3', '1', '/.well-known/openid-configuration', '[ "POST","GET" ]',  ' ', 'http', '/.well-known/openid-configuration', '[{"Host": "localhost","Port": "5003" }]', '', '', '', '', '', '', '', '', '0', NULL, '1', TO_DATE('2018-10-22', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO OcelotReRoutes VALUES ('4', '1', '/.well-known/openid-configuration/jwks', '[ "POST","GET" ]', ' ', 'http', '/.well-known/openid-configuration', '[{"Host": "localhost","Port": "5003" }]', '', '', '', '', '', '', '', '', '0', NULL, '1', TO_DATE('2018-10-22', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO OcelotReRoutes VALUES ('5', '1', '/connect/userinfo', '[ "POST","GET" ]', ' ', 'http', '/connect/userinfo', '[{"Host": "localhost","Port": "5003" }]', '', '', '', '', '', '', '', '', '0', NULL, '1', TO_DATE('2018-10-22', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO OcelotReRoutes VALUES ('6', '1', '/connect/endsession', '[ "POST","GET" ]', ' ', 'http', '/connect/endsession', '[{"Host": "localhost","Port": "5003" }]', '', '', '', '', '', '', '', '', '0', NULL, '1', TO_DATE('2018-10-22', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO OcelotReRoutes VALUES ('7', '1', '/connect/checksession', '[ "POST","GET" ]', ' ', 'http', '/connect/checksession', '[{"Host": "localhost","Port": "5003" }]', '', '', '', '', '', '', '', '', '0', NULL, '1', TO_DATE('2018-10-22', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO OcelotReRoutes VALUES ('8', '1', '/connect/revocation', '[ "POST","GET" ]', ' ', 'http', '/connect/revocation', '[{"Host": "localhost","Port": "5003" }]', '', '', '', '', '', '', '', '', '0', NULL, '1', TO_DATE('2018-10-22', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO OcelotReRoutes VALUES ('9', '1', '/connect/introspect', '[ "POST","GET" ]', ' ', 'http', '/connect/introspect', '[{"Host": "localhost","Port": "5003" }]', '', '', '', '', '', '', '', '', '0', NULL, '1', TO_DATE('2018-10-22', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO OcelotReRoutes VALUES ('10', '1', '/connect/authorize/callback', '[ "POST","GET" ]', ' ', 'http', '/connect/authorize/callback', '[{"Host": "localhost","Port": "5003" }]', '', '', '', '', '', '', '', '', '0', NULL, '1', TO_DATE('2018-10-22', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO OcelotReRoutes VALUES ('11', '1', '/connect/endsession/callback', '[ "POST","GET" ]', ' ', 'http', '/connect/endsession/callback', '[{"Host": "localhost","Port": "5003" }]', '', '', '', '', '', '', '', '', '0', NULL, '1', TO_DATE('2018-10-22', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO OcelotReRoutes VALUES ('12', '1', '/ss1/{everything}', '[ "POST","GET" ]', ' ', 'http', '/api/{everything}', ' [{"Host": "localhost","Port": "5003" },{"Host": "localhost","Port": "1002" }]', '', '', '', '', '', '', '', '', '0', NULL, '1', TO_DATE('2018-10-22', 'SYYYY-MM-DD HH24:MI:SS'));
COMMIT;-- ----------------------------
-- Primary Key structure for table OcelotGlobalConfiguration
-- ----------------------------
ALTER TABLE OcelotGlobalConfiguration ADD CONSTRAINT PK_OcelotGlobalConfiguration PRIMARY KEY (Id);-- ----------------------------
-- Primary Key structure for table OcelotReRoutes
-- ----------------------------
ALTER TABLE OcelotReRoutes ADD CONSTRAINT PK_OcelotReRoutes PRIMARY KEY (Id);

建表语句

注: 修改UPSTREAMHOST 字段为可为空

开始集成:

1.在网关项目中添加对Ocelot.ConfigAuthLimitCache的引用

2.在网关项目的Startup.cs 中修改ConfigureServices节点  标红部分

  services.AddOcelot(Configuration).AddAuthLimitCache(opt=> {opt.DbConnectionStrings = Configuration.GetSection("Setting")["ConfigDBConnction"];}).AddConsul();

3.在配置文件中添加数据库连接 蓝色部分

 "Setting": {"Port": "5001","ConfigDBConnction": "Data Source=192.168.xxx.xxx/orcl;User ID=xxx;Password=xxx;"},

4.在Program.cs中移除对原配置文件的依赖  注释部分

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>WebHost.CreateDefaultBuilder(args).UseStartup<Startup>().UseUrls($"http://*:{StartPort}");//.ConfigureAppConfiguration((hostingContext, builder) =>//{//    builder.AddJsonFile("configuration.json", false, true);//});

5.修改Ocelot.ConfigAuthLimitCache项目的数据仓储实现

增加文件

代码:

using Dapper;
using Ocelot.Cache;
using Ocelot.ConfigAuthLimitCache.Configuration;
using Ocelot.ConfigAuthLimitCache.Extensions;
using Ocelot.ConfigAuthLimitCache.Models;
using Ocelot.Configuration.File;
using Ocelot.Configuration.Repository;
using Ocelot.Logging;
using Ocelot.Responses;
using Oracle.ManagedDataAccess.Client;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;namespace Ocelot.ConfigAuthLimitCache.Repository
{/// <summary>/// nontracey/// 2019.04-08/// 实现从oracle数据库中提取配置信息/// </summary>public class OracleFileConfigurationRepository : IFileConfigurationRepository{private readonly IOcelotCache<FileConfiguration> _cache;private readonly IOcelotLogger _logger;private readonly ConfigAuthLimitCacheOptions _option;public OracleFileConfigurationRepository(ConfigAuthLimitCacheOptions option, IOcelotCache<FileConfiguration> cache, IOcelotLoggerFactory loggerFactory){_option = option;_cache = cache;_logger = loggerFactory.CreateLogger<OracleFileConfigurationRepository>();}public Task<Response> Set(FileConfiguration fileConfiguration){_cache.AddAndDelete(_option.CachePrefix + "FileConfiguration", fileConfiguration, TimeSpan.FromSeconds(1800), "");return Task.FromResult((Response)new OkResponse());}/// <summary>/// 提取配置信息/// </summary>/// <returns></returns>public async Task<Response<FileConfiguration>> Get(){var config = _cache.Get(_option.CachePrefix + "FileConfiguration", "");if (config != null){return new OkResponse<FileConfiguration>(config);}#region 提取配置信息var file = new FileConfiguration();string glbsql = "select  * from OcelotGlobalConfiguration where IsDefault=1 and rownum=1";//提取全局配置信息using (var connection = new OracleConnection(_option.DbConnectionStrings)){var result = await connection.QueryFirstOrDefaultAsync<OcelotGlobalConfiguration>(glbsql);if (result != null){var glb = new FileGlobalConfiguration();glb.BaseUrl = result.BaseUrl;glb.DownstreamScheme = result.DownstreamScheme;glb.RequestIdKey = result.RequestIdKey;if (!String.IsNullOrEmpty(result.HttpHandlerOptions)){glb.HttpHandlerOptions = result.HttpHandlerOptions.ToObject<FileHttpHandlerOptions>();}if (!String.IsNullOrEmpty(result.LoadBalancerOptions)){glb.LoadBalancerOptions = result.LoadBalancerOptions.ToObject<FileLoadBalancerOptions>();}if (!String.IsNullOrEmpty(result.QoSOptions)){glb.QoSOptions = result.QoSOptions.ToObject<FileQoSOptions>();}if (!String.IsNullOrEmpty(result.ServiceDiscoveryProvider)){glb.ServiceDiscoveryProvider = result.ServiceDiscoveryProvider.ToObject<FileServiceDiscoveryProvider>();}file.GlobalConfiguration = glb;//提取路由信息string routesql = "select * from OcelotReRoutes where OcelotGlobalConfigurationId=:OcelotGlobalConfigurationId and IsStatus=1";var routeresult = (await connection.QueryAsync<OcelotReRoutes>(routesql, new { OcelotGlobalConfigurationId=result.Id })).AsList();if (routeresult != null && routeresult.Count > 0){var reroutelist = new List<FileReRoute>();foreach (var model in routeresult){var m = new FileReRoute();if (!String.IsNullOrEmpty(model.AuthenticationOptions)){m.AuthenticationOptions = model.AuthenticationOptions.ToObject<FileAuthenticationOptions>();}if (!String.IsNullOrEmpty(model.CacheOptions)){m.FileCacheOptions = model.CacheOptions.ToObject<FileCacheOptions>();}if (!String.IsNullOrEmpty(model.DelegatingHandlers)){m.DelegatingHandlers = model.DelegatingHandlers.ToObject<List<string>>();}if (!String.IsNullOrEmpty(model.LoadBalancerOptions)){m.LoadBalancerOptions = model.LoadBalancerOptions.ToObject<FileLoadBalancerOptions>();}if (!String.IsNullOrEmpty(model.QoSOptions)){m.QoSOptions = model.QoSOptions.ToObject<FileQoSOptions>();}if (!String.IsNullOrEmpty(model.DownstreamHostAndPorts)){m.DownstreamHostAndPorts = model.DownstreamHostAndPorts.ToObject<List<FileHostAndPort>>();}//开始赋值m.DownstreamPathTemplate = model.DownstreamPathTemplate;m.DownstreamScheme = model.DownstreamScheme;m.Key = model.Key;m.Priority = model.Priority ?? 0;m.RequestIdKey = model.RequestIdKey;m.ServiceName = model.ServiceName;m.Timeout = model.Timeout ?? 0;m.UpstreamHost = model.UpstreamHost;if (!String.IsNullOrEmpty(model.UpstreamHttpMethod)){m.UpstreamHttpMethod = model.UpstreamHttpMethod.ToObject<List<string>>();}m.UpstreamPathTemplate = model.UpstreamPathTemplate;reroutelist.Add(m);}file.ReRoutes = reroutelist;}}else{throw new Exception("未监测到配置信息");}}#endregionif (file.ReRoutes == null || file.ReRoutes.Count == 0){return new OkResponse<FileConfiguration>(null);}return new OkResponse<FileConfiguration>(file);}}
}

增加oracle仓储

注:需要添加之前的CommonHelper引用或者 单独添加Oracle.ManagedDataAccess.Core nuget包引用

至此搭建完毕 将配置文件部分的内容移动到数据库即可。

参考链接:

更改到sqlserver

https://www.cnblogs.com/yilezhu/p/9839863.html

转载于:https://www.cnblogs.com/nontracey/p/10670162.html

微服务网关从零搭建——(七)更改存储方式为oracle相关推荐

  1. 微服务网关从零搭建——(三)Ocelot网关 + identity4

    增加验证服务 1.创建名为AuthService 的core 空项目 2.修改startup文件 using System; using System.Collections.Generic; usi ...

  2. 微服务之:从零搭建ocelot网关和consul集群

    介绍 微服务中有关键的几项技术,其中网关和服务服务发现,服务注册相辅相成. 首先解释几个本次教程中需要的术语 网关 Gateway(API GW / API 网关),顾名思义,是企业 IT 在系统边界 ...

  3. Spring Cloud Alibaba 快速入门(七):Gateway微服务网关

    前言:在微服务架构中,有一个组件可以说是必不可少的,那就是微服务网关.微服务网关处理了路由转发,负载均衡,缓存,权限校验,监控,限流控制,日志等.Spring Cloud Gateway是Spring ...

  4. Spring Cloud版——电影售票系统七使用 Zuul 构建微服务网关

    2019独角兽企业重金招聘Python工程师标准>>> GitHub地址:https://github.com/leebingbin/SpringCloud.MovieTicketi ...

  5. 容器云平台、灰度发布系统、微服务网关的高可用实践

    http://www.sohu.com/a/227223771_355140 系统高可用是互联网企业系统架构的基础要求之一,一个好的高可用架构可以以最低的成本.更灵活的方式,满足企业用户需求.相反,糟 ...

  6. 详解比springSecurity和shiro更简单优雅的轻量级Sa-Token框架,比如登录认证,权限认证,单点登录,OAuth2.0,分布式Session会话,微服务网关鉴权

    文章目录 1. 技术选型 2. Sa-Token概述 2.1 简单介绍 2.2 登录认证 2.3 权限认证 3. 功能一览 4. Sa-Token使用 4.1 引入Sa-Token依赖 4.2 Sa- ...

  7. Spring Cloud之(十八)微服务网关GateWay

    十八.微服务网关GateWay Zuul 1.x 是一个基于阻塞 IO 的 API Gateway 以及 Servlet:直到 2018 年 5 月,Zuul 2.x(基于Netty,也是非阻塞的,支 ...

  8. 畅购商城六:微服务网关与jwt令牌

    微服务网关 基本概念 对于微服务的各个服务一般会有不同的地址,外部客户端的一个服务可能要调用诸多的接口,这会带来以下的问题 客户端会多次请求不同的微服务,地址复杂 存在跨域请求,处理复杂 认证复杂 难 ...

  9. 使用Zuul构建微服务网关(路由)

    文章目录 一.网关产生的背景 二.Zuul简介 三.Zuul实现API网关 四. 路由配置详解 五.Zuul的容错与回退 六.Zuul的安全与Header 1.敏感头设置 2.忽略Header 七.Z ...

最新文章

  1. 【开源分享】VIDO-SLAM:一种视觉惯性动态物体SLAM系统
  2. ICCV 2021 | 英伟达新研究:直接通过视频就能捕获3D人体动作!
  3. 谷歌称居家办公影响工作效率!2021 年将回归线下办公
  4. Spring Framework 5.3.6、5.2.14 发布
  5. 概率统计笔记: 协方差与相关系数
  6. 【客户下单】前端系统Action数据封装
  7. C++学习总结(函数、类与对象)
  8. 蒙特.卡罗方法求解圆周率近似值原理与Python实现
  9. Leanote使用mysql_搭建个人Leanote云笔记
  10. Elasticsearch--进阶-bool复合查询---全文检索引擎ElasticSearch工作笔记013
  11. 你需要的是持续的服务改进 1
  12. 命令行下运行JAVA出错:错误的签名:
  13. Nginx从入门到入坟(九)- Nginx静态资源如何防盗链
  14. 一键删除PPT页面内的动画or页面的切换效果总结
  15. Postman couldn‘t upload file
  16. u盘引导不能识别惠普服务器硬盘,如何解决惠普电脑uefi识别不了u盘
  17. 【搬运】常用逻辑符号整理
  18. HSV颜色空间和RGB颜色空间相互转换C语言实现
  19. uC/OS iii(三)任务管理之任务状态
  20. zip直链生成网站_调优-WEB资讯专栏-DMOZ中文网站分类目录

热门文章

  1. WEB登录H3C模拟器
  2. stm32的rxne和idle中断_HAL库的STM32F767的DMA通过IDLE中断接收数据但不能访问
  3. 68-95-99规则–以普通英语解释正态分布
  4. 裸奔的支付X聊天,你还敢用吗?
  5. idea打开web项目之后一直闪烁
  6. webView加载不出网页的一种可能情况
  7. dis的前缀单词有哪些_玩转英语词汇--词汇积累策略之前缀dis
  8. Java程序员到什么级别可以去BAT上班?
  9. AndroidApplication优化解耦
  10. 改變人生的21種好習慣