配置文件开关,数据库读写分离

This commit is contained in:
橙子
2021-10-26 15:09:07 +08:00
parent b29b6be734
commit 5d5452b531
30 changed files with 397 additions and 163 deletions

View File

@@ -23,36 +23,39 @@ namespace Yi.Framework.WebCore.MiddlewareExtend
/// <param name="app"></param>
/// <param name="healthService"></param>
/// <returns></returns>
public static void UseConsulService(this IApplicationBuilder app)
public static void UseConsulService(this IApplicationBuilder app)
{
var consulRegisterOption= Appsettings.app<ConsulRegisterOption>("ConsulRegisterOption");
var consulClientOption= Appsettings.app<ConsulClientOption>("ConsulRegisterOption");
using (ConsulClient client = new ConsulClient(c =>
{
c.Address = new Uri($"http://{consulClientOption.IP}:{consulClientOption.Port}/");
c.Datacenter = consulClientOption.Datacenter;
}))
if (Appsettings.appBool("Consul_Enabled"))
{
client.Agent.ServiceRegister(new AgentServiceRegistration()
var consulRegisterOption = Appsettings.app<ConsulRegisterOption>("ConsulRegisterOption");
var consulClientOption = Appsettings.app<ConsulClientOption>("ConsulRegisterOption");
using (ConsulClient client = new ConsulClient(c =>
{
c.Address = new Uri($"http://{consulClientOption.IP}:{consulClientOption.Port}/");
c.Datacenter = consulClientOption.Datacenter;
}))
{
ID = $"{consulRegisterOption.IP}-{consulRegisterOption.Port}-{Guid.NewGuid()}",//唯一Id
Name = consulRegisterOption.GroupName,//组名称-Group
Address = consulRegisterOption.IP,
Port = consulRegisterOption.Port,
Tags = new string[] { consulRegisterOption.Tag },
Check = new AgentServiceCheck()
client.Agent.ServiceRegister(new AgentServiceRegistration()
{
Interval = TimeSpan.FromSeconds(consulRegisterOption.Interval),
HTTP = $"http://{consulRegisterOption.IP}:{consulRegisterOption.Port}{consulRegisterOption.HealthCheckUrl}",
Timeout = TimeSpan.FromSeconds(consulRegisterOption.Timeout),
DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(consulRegisterOption.DeregisterCriticalServiceAfter)
}
}).Wait();
Console.WriteLine($"{JsonConvert.SerializeObject(consulRegisterOption)} 完成注册");
ID = $"{consulRegisterOption.IP}-{consulRegisterOption.Port}-{Guid.NewGuid()}",//唯一Id
Name = consulRegisterOption.GroupName,//组名称-Group
Address = consulRegisterOption.IP,
Port = consulRegisterOption.Port,
Tags = new string[] { consulRegisterOption.Tag },
Check = new AgentServiceCheck()
{
Interval = TimeSpan.FromSeconds(consulRegisterOption.Interval),
HTTP = $"http://{consulRegisterOption.IP}:{consulRegisterOption.Port}{consulRegisterOption.HealthCheckUrl}",
Timeout = TimeSpan.FromSeconds(consulRegisterOption.Timeout),
DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(consulRegisterOption.DeregisterCriticalServiceAfter)
}
}).Wait();
Console.WriteLine($"{JsonConvert.SerializeObject(consulRegisterOption)} 完成注册");
}
}
}
}
}

View File

@@ -12,21 +12,28 @@ namespace Yi.Framework.WebCore.MiddlewareExtend
{
public static IServiceCollection AddCorsService(this IServiceCollection services)
{
services.AddCors(options => options.AddPolicy("CorsPolicy",//解决跨域问题
builder =>
{
builder.AllowAnyMethod()
.SetIsOriginAllowed(_ => true)
.AllowAnyHeader()
.AllowCredentials();
}));
if (Appsettings.appBool("Cors_Enabled"))
{
services.AddCors(options => options.AddPolicy("CorsPolicy",//解决跨域问题
builder =>
{
builder.AllowAnyMethod()
.SetIsOriginAllowed(_ => true)
.AllowAnyHeader()
.AllowCredentials();
}));
}
return services;
}
public static void UseCorsService(this IApplicationBuilder app)
{
app.UseCors("CorsPolicy");
if (Appsettings.appBool("Cors_Enabled"))
{
app.UseCors("CorsPolicy");
}
}
}

View File

@@ -0,0 +1,23 @@
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Yi.Framework.Common.IOCOptions;
using Yi.Framework.Model;
using Yi.Framework.Model.ModelFactory;
namespace Yi.Framework.WebCore.MiddlewareExtend
{
public static class DbExtend
{
public static IServiceCollection AddDbService(this IServiceCollection services)
{
DbContextFactory.MutiDB_Enabled = Appsettings.appBool("MutiDB_Enabled");
DataContext.DbSelect = Appsettings.app("DbSelect");
services.Configure<DbConnOptions>(Appsettings.appConfiguration("DbConn"));
return services;
}
}
}

View File

@@ -7,24 +7,29 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Yi.Framework.Model.DbInit;
using Yi.Framework.Model.ModelFactory;
namespace Yi.Framework.WebCore.MiddlewareExtend
{
public static class DbSeedInitExtend
{
private static readonly ILog log = LogManager.GetLogger(typeof(DbSeedInitExtend));
public static void UseDbSeedInitService(this IApplicationBuilder app, DbContext _Db)
public static void UseDbSeedInitService(this IApplicationBuilder app, IDbContextFactory _DbFactory)
{
if (app == null) throw new ArgumentNullException(nameof(app));
try
if (Appsettings.appBool("DbSeed_Enabled"))
{
DataSeed.SeedAsync(_Db).Wait();
}
catch (Exception e)
{
log.Error($"Error occured seeding the Database.\n{e.Message}");
throw;
if (app == null) throw new ArgumentNullException(nameof(app));
try
{
DataSeed.SeedAsync(_DbFactory).Wait();
}
catch (Exception e)
{
log.Error($"Error occured seeding the Database.\n{e.Message}");
throw;
}
}
}
}

View File

@@ -22,12 +22,17 @@ namespace Yi.Framework.WebCore.MiddlewareExtend
/// <returns></returns>
public static void UseHealthCheckMiddleware(this IApplicationBuilder app, string checkPath = "/Health")
{
app.Map(checkPath, applicationBuilder => applicationBuilder.Run(async context =>
if (Appsettings.appBool("HealthCheck_Enabled"))
{
Console.WriteLine($"This is Health Check");
context.Response.StatusCode = (int)HttpStatusCode.OK;
await context.Response.WriteAsync("OK");
}));
app.Map(checkPath, applicationBuilder => applicationBuilder.Run(async context =>
{
Console.WriteLine($"This is Health Check");
context.Response.StatusCode = (int)HttpStatusCode.OK;
await context.Response.WriteAsync("OK");
}));
}
}
}

View File

@@ -5,6 +5,7 @@ using Microsoft.Extensions.DependencyInjection;
using System;
using System.IO;
using Yi.Framework.Model;
using Yi.Framework.Model.ModelFactory;
namespace Yi.Framework.WebCore.MiddlewareExtend
{
@@ -19,13 +20,10 @@ namespace Yi.Framework.WebCore.MiddlewareExtend
//配置文件使用配置
#endregion
services.AddSingleton(new Appsettings(configuration));
#region
//数据库配置
#endregion
services.AddScoped<DbContext, DataContext>();
services.AddTransient<DbContext, DataContext>();
return services;
}

View File

@@ -1,20 +0,0 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.IO;
using Yi.Framework.Common.IOCOptions;
namespace Yi.Framework.WebCore.MiddlewareExtend
{
/// <summary>
/// 数据库扩展
/// </summary>
public static class MysqlExtension
{
public static IServiceCollection AddMysqlService(this IServiceCollection services)
{
services.Configure<MySqlConnOptions>(Appsettings.appConfiguration("MysqlConn"));
return services;
}
}
}

View File

@@ -14,8 +14,12 @@ namespace Yi.Framework.WebCore.MiddlewareExtend
{
public static IServiceCollection AddRabbitMQService(this IServiceCollection services)
{
services.Configure<RabbitMQOptions>(Appsettings.appConfiguration("RabbitConn"));
if (Appsettings.appBool("RabbitMQ_Enabled"))
{
services.Configure<RabbitMQOptions>(Appsettings.appConfiguration("RabbitConn"));
}
return services;
}
}
}

View File

@@ -14,7 +14,10 @@ namespace Yi.Framework.WebCore.MiddlewareExtend
{
public static IServiceCollection AddRedisService(this IServiceCollection services)
{
services.Configure<RedisConnOptions>(Appsettings.appConfiguration("RedisConn"));
if (Appsettings.appBool("Redis_Enabled"))
{
services.Configure<RedisConnOptions>(Appsettings.appConfiguration("RedisConn"));
}
return services;
}
}

View File

@@ -1,20 +0,0 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.IO;
using Yi.Framework.Common.IOCOptions;
namespace Yi.Framework.WebCore.MiddlewareExtend
{
/// <summary>
/// 数据库扩展
/// </summary>
public static class SqliteExtension
{
public static IServiceCollection AddSqliteService(this IServiceCollection services)
{
services.Configure<SqliteOptions>(Appsettings.appConfiguration("SqliteConn"));
return services;
}
}
}