提交 0fecf0ab 编写于 作者: 麦壳饼's avatar 麦壳饼

add to IoTSharp.Data.MySQL

上级 baaff3dc
......@@ -9,7 +9,7 @@
<ItemGroup>
<PackageReference Include="AntDesign" Version="0.6.0" />
<PackageReference Include="AntDesign.Charts" Version="0.2.0-*" />
<PackageReference Include="AntDesign.Pro.Layout" Version="0.1.0-nightly-201127071242" />
<PackageReference Include="AntDesign.Pro.Layout" Version="0.1.0-nightly-210129055145" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="5.0.3" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="5.0.3" PrivateAssets="all" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" Version="5.0.3" />
......
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AspNetCore.HealthChecks.MySql" Version="5.0.1" />
<PackageReference Include="AspNetCore.HealthChecks.UI.MySql.Storage" Version="5.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.3">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="5.0.3" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="5.0.0-alpha.2" />
<PackageReference Include="EFCore.Sharding.MySql" Version="5.0.0.6" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\IoTSharp.Data\IoTSharp.Data.csproj" />
</ItemGroup>
</Project>

using EFCore.Sharding;
using IoTSharp.Data;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using System;
namespace Microsoft.Extensions.DependencyInjection
{
public static class IoTSharpDataBuilderExtensions
{
public static void ConfigureMySql(this IServiceCollection services, string connectionString,int poolSize , IHealthChecksBuilder checksBuilder, HealthChecksUIBuilder healthChecksUI)
{
services.AddDbContextPool<ApplicationDbContext>(builder =>
{
builder.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString), s => s.MigrationsAssembly("IoTSharp.Data.MySQL"));
}
, poolSize );
checksBuilder.AddMySql(connectionString, "IoTSharp.Data.MySQL");
healthChecksUI.AddMySqlStorage(connectionString);
}
public static void UseMySqlToSharding(this IShardingBuilder builder, string connectionString, ExpandByDateMode expandBy)
{
builder.AddDataSource(connectionString, ReadWriteType.Read | ReadWriteType.Write, DatabaseType.MySql);
builder.SetDateSharding<TelemetryData>(nameof(TelemetryData.DateTime), expandBy, DateTime.Now);
}
}
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.3">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="5.0.2" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="AspNetCore.HealthChecks.NpgSql" Version="5.0.1" />
<PackageReference Include="AspNetCore.HealthChecks.UI.PostgreSQL.Storage" Version="5.0.1" />
<PackageReference Include="AspNetCore.HealthChecks.UI.Core" Version="5.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.3">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="5.0.3" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="5.0.2" />
<PackageReference Include="EFCore.Sharding.PostgreSql" Version="5.0.0.6" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\IoTSharp.Data\IoTSharp.Data.csproj" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\IoTSharp.Data\IoTSharp.Data.csproj" />
</ItemGroup>
</Project>

using EFCore.Sharding;
using IoTSharp.Data;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using System;
namespace Microsoft.Extensions.DependencyInjection
{
public static class IoTSharpDataBuilderExtensions
{
public static void ConfigureNpgsql(this IServiceCollection services, string connectionString, int poolSize, IHealthChecksBuilder checksBuilder, HealthChecksUIBuilder healthChecksUI)
{
services.AddDbContextPool<ApplicationDbContext>(builder =>
{
builder.UseNpgsql(connectionString, s => s.MigrationsAssembly("IoTSharp.Data.PostgreSQL"));
}
, poolSize);
checksBuilder.AddNpgSql(connectionString);
healthChecksUI.AddPostgreSqlStorage(connectionString);
}
public static void UseNpgsqlToSharding(this IShardingBuilder builder, string connectionString, ExpandByDateMode expandBy)
{
builder.AddDataSource(connectionString, ReadWriteType.Read | ReadWriteType.Write, DatabaseType.PostgreSql);
builder.SetDateSharding<TelemetryData>(nameof(TelemetryData.DateTime), expandBy, DateTime.Now);
}
}
}
......@@ -9,6 +9,8 @@
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="5.0.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.3" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
<PackageReference Include="EFCore.Sharding" Version="5.0.0.6" />
</ItemGroup>
</Project>
......@@ -43,9 +43,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IoTSharp.Sdk.Http", "IoTSha
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IoTSharp.Sdk.MQTT", "IoTSharp.SDKs\IoTSharp.Sdk.MQTT\IoTSharp.Sdk.MQTT.csproj", "{A2A1191C-32ED-482B-AACE-4091EE518CEC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IoTSharp.Data.PostgreSQL", "IoTSharp.Data.PostgreSQL\IoTSharp.Data.PostgreSQL.csproj", "{0A6EAEEC-79A3-406B-9897-C3DA17F06BB9}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IoTSharp.Data.PostgreSQL", "IoTSharp.Data.PostgreSQL\IoTSharp.Data.PostgreSQL.csproj", "{0A6EAEEC-79A3-406B-9897-C3DA17F06BB9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IoTSharp.Data", "IoTSharp.Data\IoTSharp.Data.csproj", "{522B2676-EB0E-4191-ACBC-EDC86DD2351D}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IoTSharp.Data", "IoTSharp.Data\IoTSharp.Data.csproj", "{522B2676-EB0E-4191-ACBC-EDC86DD2351D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IoTSharp.Data.MySQL", "IoTSharp.Data.MySQL\IoTSharp.Data.MySQL.csproj", "{233F2C8D-DD4C-49B7-99A2-F3DB5620DEFB}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
......@@ -276,6 +278,26 @@ Global
{522B2676-EB0E-4191-ACBC-EDC86DD2351D}.Release|x64.Build.0 = Release|Any CPU
{522B2676-EB0E-4191-ACBC-EDC86DD2351D}.Release|x86.ActiveCfg = Release|Any CPU
{522B2676-EB0E-4191-ACBC-EDC86DD2351D}.Release|x86.Build.0 = Release|Any CPU
{233F2C8D-DD4C-49B7-99A2-F3DB5620DEFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{233F2C8D-DD4C-49B7-99A2-F3DB5620DEFB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{233F2C8D-DD4C-49B7-99A2-F3DB5620DEFB}.Debug|ARM.ActiveCfg = Debug|Any CPU
{233F2C8D-DD4C-49B7-99A2-F3DB5620DEFB}.Debug|ARM.Build.0 = Debug|Any CPU
{233F2C8D-DD4C-49B7-99A2-F3DB5620DEFB}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{233F2C8D-DD4C-49B7-99A2-F3DB5620DEFB}.Debug|ARM64.Build.0 = Debug|Any CPU
{233F2C8D-DD4C-49B7-99A2-F3DB5620DEFB}.Debug|x64.ActiveCfg = Debug|Any CPU
{233F2C8D-DD4C-49B7-99A2-F3DB5620DEFB}.Debug|x64.Build.0 = Debug|Any CPU
{233F2C8D-DD4C-49B7-99A2-F3DB5620DEFB}.Debug|x86.ActiveCfg = Debug|Any CPU
{233F2C8D-DD4C-49B7-99A2-F3DB5620DEFB}.Debug|x86.Build.0 = Debug|Any CPU
{233F2C8D-DD4C-49B7-99A2-F3DB5620DEFB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{233F2C8D-DD4C-49B7-99A2-F3DB5620DEFB}.Release|Any CPU.Build.0 = Release|Any CPU
{233F2C8D-DD4C-49B7-99A2-F3DB5620DEFB}.Release|ARM.ActiveCfg = Release|Any CPU
{233F2C8D-DD4C-49B7-99A2-F3DB5620DEFB}.Release|ARM.Build.0 = Release|Any CPU
{233F2C8D-DD4C-49B7-99A2-F3DB5620DEFB}.Release|ARM64.ActiveCfg = Release|Any CPU
{233F2C8D-DD4C-49B7-99A2-F3DB5620DEFB}.Release|ARM64.Build.0 = Release|Any CPU
{233F2C8D-DD4C-49B7-99A2-F3DB5620DEFB}.Release|x64.ActiveCfg = Release|Any CPU
{233F2C8D-DD4C-49B7-99A2-F3DB5620DEFB}.Release|x64.Build.0 = Release|Any CPU
{233F2C8D-DD4C-49B7-99A2-F3DB5620DEFB}.Release|x86.ActiveCfg = Release|Any CPU
{233F2C8D-DD4C-49B7-99A2-F3DB5620DEFB}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
......
using CoAP;
using CoAP.Server;
using DotNetCore.CAP.Dashboard.NodeDiscovery;
using EFCore.Sharding;
using IoTSharp.Data;
using MaiKeBing.CAP;
using MaiKeBing.HostedService.ZeroMQ;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
......
......@@ -40,18 +40,18 @@
<PackageReference Include="AspNetCore.HealthChecks.Kafka" Version="5.0.1" />
<PackageReference Include="AspNetCore.HealthChecks.MongoDb" Version="5.0.1" />
<PackageReference Include="AspNetCore.HealthChecks.Network" Version="5.0.1" />
<PackageReference Include="AspNetCore.HealthChecks.NpgSql" Version="5.0.1" />
<PackageReference Include="AspNetCore.HealthChecks.Rabbitmq" Version="5.0.1" />
<PackageReference Include="AspNetCore.HealthChecks.Redis" Version="5.0.1" />
<PackageReference Include="AspNetCore.HealthChecks.System" Version="5.0.1" />
<PackageReference Include="AspNetCore.HealthChecks.UI" Version="5.0.1" />
<PackageReference Include="AspNetCore.HealthChecks.UI.Client" Version="5.0.1" />
<PackageReference Include="AspNetCore.HealthChecks.UI.InMemory.Storage" Version="5.0.1" />
<PackageReference Include="AspNetCore.HealthChecks.UI.PostgreSQL.Storage" Version="5.0.1" />
<PackageReference Include="AspNetCore.HealthChecks.UI.SQLite.Storage" Version="5.0.1" />
<PackageReference Include="AspNetCore.HealthChecks.Uris" Version="5.0.1" />
<PackageReference Include="AspNetCore.HealthChecks.Network" Version="5.0.1" />
<PackageReference Include="AspNetCore.HealthChecks.NpgSql" Version="5.0.1" />
<PackageReference Include="CAP.Extensions" Version="1.0.31" />
<PackageReference Include="DotNetCore.CAP" Version="3.1.2" />
<PackageReference Include="DotNetCore.CAP.Dashboard" Version="3.1.2" />
......@@ -64,8 +64,7 @@
<PackageReference Include="EasyCaching.InMemory" Version="1.2.0" />
<PackageReference Include="EasyCaching.LiteDB" Version="1.2.0" />
<PackageReference Include="EasyCaching.Redis" Version="1.2.1" />
<PackageReference Include="EFCore.Sharding" Version="5.0.0.6" />
<PackageReference Include="EFCore.Sharding.PostgreSql" Version="5.0.0.6" />
<PackageReference Include="GitVersionTask" Version="5.5.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
......@@ -91,6 +90,7 @@
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="5.0.2" />
<PackageReference Include="MQTTnet" Version="3.0.14" />
<PackageReference Include="MQTTnet.AspNetCore" Version="3.0.14" />
<PackageReference Include="MQTTnet.AspNetCoreEx" Version="3.0.14" />
<PackageReference Include="MQTTnet.Extensions.Rpc" Version="3.0.14" />
<PackageReference Include="NetMQ" Version="4.0.1.6" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="5.0.2" />
......@@ -114,7 +114,6 @@
<PackageReference Include="Microsoft.Extensions.Hosting" Version="5.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="5.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="5.0.1" />
<PackageReference Include="MQTTnet.AspNetCoreEx" Version="3.0.13" />
<PackageReference Include="MQTTnet.Extensions.ManagedClient" Version="3.0.14" />
</ItemGroup>
<ItemGroup>
......@@ -139,6 +138,7 @@
</None>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\IoTSharp.Data.MySQL\IoTSharp.Data.MySQL.csproj" />
<ProjectReference Include="..\IoTSharp.Data.PostgreSQL\IoTSharp.Data.PostgreSQL.csproj" />
<ProjectReference Include="..\IoTSharp.Data\IoTSharp.Data.csproj" />
</ItemGroup>
......
......@@ -72,18 +72,35 @@ namespace IoTSharp
{
Configuration.Bind(setting);
}));
services.AddDbContextPool<ApplicationDbContext>(options =>
var healthChecksUI = services.AddHealthChecksUI(setup =>
{
switch (settings.DataBase)
{
case DataBaseType.PostgreSql:
default:
options.UseNpgsql(Configuration.GetConnectionString("IoTSharp"), s => s.MigrationsAssembly("IoTSharp.Data.PostgreSQL"));
break;
}
setup.SetHeaderText("IoTSharp HealthChecks");
//Maximum history entries by endpoint
setup.MaximumHistoryEntriesPerEndpoint(50);
setup.AddIoTSharpHealthCheckEndpoint();
});
var healthChecks = services.AddHealthChecks()
.AddDiskStorageHealthCheck(dso =>
{
System.IO.DriveInfo.GetDrives()
.Where(d => d.DriveType != System.IO.DriveType.CDRom && d.DriveType != System.IO.DriveType.Ram)
.Select(f => f.Name).Distinct().ToList()
.ForEach(f => dso.AddDrive(f, 1024));
}, name: "Disk Storage");
switch (settings.DataBase)
{
case DataBaseType.MySql:
services.ConfigureMySql(Configuration.GetConnectionString("IoTSharp"), settings.DbContextPoolSize, healthChecks, healthChecksUI);
break;
case DataBaseType.PostgreSql:
default:
services.ConfigureNpgsql(Configuration.GetConnectionString("IoTSharp"), settings.DbContextPoolSize, healthChecks, healthChecksUI);
break;
}
, poolSize: settings.DbContextPoolSize);
services.AddIdentity<IdentityUser, IdentityRole>()
.AddRoles<IdentityRole>()
.AddRoleManager<RoleManager<IdentityRole>>()
......@@ -128,24 +145,8 @@ namespace IoTSharp
services.AddMqttClient(settings.MqttClient);
services.AddSingleton<RetainedMessageHandler>();
var healthChecks = services.AddHealthChecks()
.AddNpgSql(Configuration.GetConnectionString("IoTSharp"), name: "PostgreSQL")
.AddDiskStorageHealthCheck(dso =>
{
System.IO.DriveInfo.GetDrives()
.Where(d=>d.DriveType != System.IO.DriveType.CDRom && d.DriveType!= System.IO.DriveType.Ram)
.Select(f => f.Name).Distinct().ToList()
.ForEach(f => dso.AddDrive(f, 1024));
}, name: "Disk Storage");
services.AddHealthChecksUI(setup =>
{
setup.SetHeaderText("IoTSharp HealthChecks");
//Maximum history entries by endpoint
setup.MaximumHistoryEntriesPerEndpoint(50);
setup.AddIoTSharpHealthCheckEndpoint();
}).AddPostgreSqlStorage(Configuration.GetConnectionString("IoTSharp"));
services.AddSilkierQuartz(opt =>
{
......@@ -194,8 +195,17 @@ namespace IoTSharp
case TelemetryStorage.Sharding:
services.AddEFCoreSharding(config =>
{
config.AddDataSource(Configuration.GetConnectionString("TelemetryStorage"), ReadWriteType.Read | ReadWriteType.Write, settings.Sharding.DatabaseType);
config.SetDateSharding<TelemetryData>(nameof(TelemetryData.DateTime), settings.Sharding.ExpandByDateMode, DateTime.Now);
switch (settings.DataBase)
{
case DataBaseType.MySql:
config.UseMySqlToSharding(Configuration.GetConnectionString("TelemetryStorage"), settings.Sharding.ExpandByDateMode);
break;
case DataBaseType.PostgreSql:
default:
config.UseNpgsqlToSharding(Configuration.GetConnectionString("TelemetryStorage"), settings.Sharding.ExpandByDateMode);
break;
}
});
services.AddSingleton<IStorage, ShardingStorage>();
break;
......
......@@ -6,8 +6,10 @@
"Microsoft": "Information"
}
},
"DataBase": "MySql",
"ConnectionStrings": {
"IoTSharp": "Server=localhost;Database=IoTSharp;Username=postgres;Password=future;",
//pgsql "IoTSharp": "Server=localhost;Database=IoTSharp;Username=postgres;Password=future;",
"IoTSharp": "server=localhost;user=root;password=kissme;database=IoTSharp",
"EventBusStore": "mongodb://root:kissme@mongodb:27017",
"TelemetryStorage": "DataSource=taos;DataBase=IoTSharp;Username=root;Password=taosdata;Port=6030",
"EventBusMQ": "amqp://root:kissme@rabbitmq:5672"
......@@ -19,7 +21,7 @@
"JwtAudience": "IoTSharp.Net",
"EventBusStore": "InMemory",
"EventBusMQ": "InMemory",
"TelemetryStorage": "Taos"
"TelemetryStorage": "Sharding"
//"Discovery": {
// "DiscoveryServerHostName": "iotsharp",
// "DiscoveryServerPort": 8500,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册