From f39f31c2cbb0086d41e3d12b625ab280e17837a8 Mon Sep 17 00:00:00 2001 From: MysticBoy Date: Sat, 31 Oct 2020 00:42:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0RabbitMQ=E8=B0=83=E6=95=B4url?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E5=AD=97=E7=AC=A6=E4=B8=B2=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=20=20=E8=B0=83=E6=95=B4docker-compose=20=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 ++ IoTSharp/Extensions/IoTSharpExtension.cs | 42 +++++++++++++++++++++++- IoTSharp/Startup.cs | 35 +++++++++++--------- IoTSharp/appsettings.Development.json | 32 ++++-------------- IoTSharp/appsettings.json | 14 +++----- appsettings.Development.json | 25 ++++---------- docker-compose.override.yml | 1 - docker-compose.yml | 36 +++++++++++++++++--- 8 files changed, 113 insertions(+), 75 deletions(-) diff --git a/.gitignore b/.gitignore index 94904d07..5e555fd2 100644 --- a/.gitignore +++ b/.gitignore @@ -339,3 +339,6 @@ ASALocalRun/ /IoTSharp/DiskQuue-log.iotsharp /zk-single-kafka-single /postgresql +/data +/data +/rabbitmq diff --git a/IoTSharp/Extensions/IoTSharpExtension.cs b/IoTSharp/Extensions/IoTSharpExtension.cs index ba4bd945..d2a80d77 100644 --- a/IoTSharp/Extensions/IoTSharpExtension.cs +++ b/IoTSharp/Extensions/IoTSharpExtension.cs @@ -1,4 +1,5 @@ -using IoTSharp.Data; +using DotNetCore.CAP; +using IoTSharp.Data; using IoTSharp.Services; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Mvc; @@ -9,6 +10,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using MQTTnet.Diagnostics; +using Silkier.Extensions; using System; using System.IO; using System.Linq; @@ -97,5 +99,43 @@ namespace IoTSharp return externalPath + internalUiRoute; }); } + public static CapOptions UseRabbitMQ(this CapOptions options, Uri url) + { + return options.UseRabbitMQ(opt => + { + var usr = url.UserInfo?.Split(':'); + opt.HostName = url.Host; + opt.UserName = usr?.Length > 0 ? usr[0] : RabbitMQOptions.DefaultUser; + opt.Password = usr?.Length > 1 ? usr[1] : RabbitMQOptions.DefaultPass; + opt.Port = url.Port; + }); + } + public static void ConnectionString2Options(this T option ,string _connectionString ) + { + _connectionString.Split(';', StringSplitOptions.RemoveEmptyEntries).ForEach(f => + { + try + { + var opt = f.Split('='); + var pty = option?.GetType().GetProperty(opt[0]); + if (pty.PropertyType == typeof(string)) + { + pty.SetValue(option, opt[1]); + } + else if (pty.PropertyType == typeof(int)) + { + pty.SetValue(option, int.Parse(opt[1])); + } + else if (pty.PropertyType == typeof(bool)) + { + pty.SetValue(option, opt[1]?.ToString().ToLower() == bool.TrueString.ToLower()); + } + } + catch (Exception) + { + + } + }); + } } } \ No newline at end of file diff --git a/IoTSharp/Startup.cs b/IoTSharp/Startup.cs index 57c0bfe1..c2090b4c 100644 --- a/IoTSharp/Startup.cs +++ b/IoTSharp/Startup.cs @@ -49,6 +49,8 @@ using EasyCaching.Core.Configurations; using Silkier.Extensions; using Maikebing.Data.Taos; using Dynamitey; +using DotNetCore.CAP; +using RabbitMQ.Client; namespace IoTSharp { @@ -138,13 +140,14 @@ namespace IoTSharp services.AddMqttClient(settings.MqttClient); services.AddSingleton(); var healthChecks = services.AddHealthChecks() - .AddNpgSql(Configuration["IoTSharp"], name: "PostgreSQL") + .AddNpgSql(Configuration.GetConnectionString("IoTSharp"), name: "PostgreSQL") .AddDiskStorageHealthCheck(dso => { System.IO.DriveInfo.GetDrives().Select(f=>f.Name).Distinct().ToList().ForEach(f => dso.AddDrive(f, 1024)); }, name: "Disk Storage"); - services.AddHealthChecksUI().AddPostgreSqlStorage(Configuration.GetConnectionString("IoTSharp")); + services.AddHealthChecksUI(cfg=>cfg.AddHealthCheckEndpoint("IoTSharp", "http://iotsharp/healthz")) + .AddPostgreSqlStorage(Configuration.GetConnectionString("IoTSharp")); services.AddSilkierQuartz(opt=> { //opt.Add("quartz.serializer.type", "json"); @@ -197,8 +200,8 @@ namespace IoTSharp break; case TelemetryStorage.Taos: services.AddSingleton(); - services.AddObjectPool(()=> new TaosConnection(settings.ConnectionStrings["Taos"])); - healthChecks.AddTDengine(Configuration.GetConnectionString("Taos")); + services.AddObjectPool(()=> new TaosConnection(settings.ConnectionStrings["TelemetryStorage"])); + healthChecks.AddTDengine(Configuration.GetConnectionString("TelemetryStorage")); break; default: break; @@ -232,7 +235,8 @@ namespace IoTSharp { case EventBusMQ.RabbitMQ: - x.UseRabbitMQ(Configuration.GetConnectionString("EventBusMQ")); + x.UseRabbitMQ(new Uri( Configuration.GetConnectionString("EventBusMQ"))); + //amqp://guest:guest@localhost:5672 healthChecks.AddRabbitMQ(Configuration.GetConnectionString("EventBusMQ"), name: "EventBusMQ"); break; case EventBusMQ.Kafka: @@ -305,22 +309,23 @@ namespace IoTSharp }); app.UseSwaggerUi3(); app.UseOpenApi(); - - - app.UseForwardedHeaders(new ForwardedHeadersOptions - { - ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto - }); - app.UseResponseCompression(); // No need if you use IIS, but really something good for Kestrel! - - app.UseHealthChecks("/healthz", new HealthCheckOptions { Predicate = _ => true, - ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse + ResponseWriter = (httpContext, report) => + { + return UIResponseWriter.WriteHealthCheckUIResponse(httpContext, report); + } }); app.UseHealthChecksUI(); + + + app.UseForwardedHeaders(new ForwardedHeadersOptions + { + ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto + }); + app.UseResponseCompression(); // No need if you use IIS, but really something good for Kestrel! } } } \ No newline at end of file diff --git a/IoTSharp/appsettings.Development.json b/IoTSharp/appsettings.Development.json index 26bd141d..4882c24d 100644 --- a/IoTSharp/appsettings.Development.json +++ b/IoTSharp/appsettings.Development.json @@ -7,34 +7,16 @@ } }, "ConnectionStrings": { - "IoTSharp": "Server=localhost;Database=IoTSharp;Username=postgres;Password=future;", - "EventBusStore": "Server=localhost;Database=IoTSharp;Username=postgres;Password=future;", - "TelemetryStorage": "Server=localhost;Database=IoTSharp;Username=postgres;Password=future;", - "EventBusMQ": "127.0.0.1" - }, - "MqttBroker": { - "Port": 7777 + "IoTSharp": "Server=pgsql;Database=IoTSharp;Username=postgres;Password=future;", + "EventBusStore": "mongodb://root:kissme@mongodb:27017", + "TelemetryStorage": "DataSource=taos;DataBase=IoTSharp;Username=root;Password=taosdata;Port=6030", + "EventBusMQ": "amqp://root:kissme@rabbitmq:5672" }, "JwtKey": "kissmekissmekissmekissmekissmekissmekissmekissmekissmekissmekissmekissmekissmekissmekissmekissme", "JwtExpireHours": 24, "JwtIssuer": "IoTSharp.Net", "JwtAudience": "IoTSharp.Net", - "EventBusStore": "PostgreSql", - "EventBusMQ": "ZeroMQ", - "TelemetryStorage": "Sharding", - "CachingUseIn": "InMemory", - "CachingUseRedisHosts": "127.0.0.1:6379;127.0.0.2:6379", - "Sharding": { - "DatabaseType": "PostgreSql", - "ExpandByDateMode": "PerMonth" - }, - "NetMQ": { - "Enable": "true", - "SubscriberAddress": "tcp://127.0.0.1:5556", - "PublisherAddress": "tcp://127.0.0.1:5557" - }, - "ZMQOption": { - "SendAddress": "tcp://127.0.0.1:5556", - "ReceiveAddress": "tcp://127.0.0.1:5557" - } + "EventBusStore": "MongoDB", + "EventBusMQ": "RabbitMQ", + "TelemetryStorage": "Taos" } \ No newline at end of file diff --git a/IoTSharp/appsettings.json b/IoTSharp/appsettings.json index 34ee644f..23525d12 100644 --- a/IoTSharp/appsettings.json +++ b/IoTSharp/appsettings.json @@ -12,22 +12,16 @@ "JwtExpireHours": 24, "JwtIssuer": "IoTSharp.Net", "JwtAudience": "IoTSharp.Net", - "HealthChecks-UI": { + "HealthChecksUI": { "HealthChecks": [ { - "Name": "HTTP-Api-Basic", - "Uri": "http://localhost/healthz" + "Name": "IoTSharp", + "Uri": "http://iotsharp/healthz" } ], "Webhooks": [ - { - "Name": "", - "Uri": "", - "Payload": "", - "RestoredPayload": "" - } ], - "EvaluationTimeOnSeconds": 10, + "EvaluationTimeinSeconds": 10, "MinimumSecondsBetweenFailureNotifications": 60 }, "AllowedHosts": "*" diff --git a/appsettings.Development.json b/appsettings.Development.json index ee4f4d1c..4882c24d 100644 --- a/appsettings.Development.json +++ b/appsettings.Development.json @@ -8,28 +8,15 @@ }, "ConnectionStrings": { "IoTSharp": "Server=pgsql;Database=IoTSharp;Username=postgres;Password=future;", - "EventBusStore": "Server=pgsql;Database=IoTSharp;Username=postgres;Password=future;", - "TelemetryStorage": "Server=pgsql;Database=IoTSharp;Username=postgres;Password=future;", - "EventBusMQ": "127.0.0.1" + "EventBusStore": "mongodb://root:kissme@mongodb:27017", + "TelemetryStorage": "DataSource=taos;DataBase=IoTSharp;Username=root;Password=taosdata;Port=6030", + "EventBusMQ": "amqp://root:kissme@rabbitmq:5672" }, "JwtKey": "kissmekissmekissmekissmekissmekissmekissmekissmekissmekissmekissmekissmekissmekissmekissmekissme", "JwtExpireHours": 24, "JwtIssuer": "IoTSharp.Net", "JwtAudience": "IoTSharp.Net", - "EventBusStore": "PostgreSql", - "EventBusMQ": "ZeroMQ", - "TelemetryStorage": "Sharding", - "Sharding": { - "DatabaseType": "PostgreSql", - "ExpandByDateMode": "PerMonth" - }, - "NetMQ": { - "Enable": "true", - "SubscriberAddress": "tcp://127.0.0.1:5556", - "PublisherAddress": "tcp://127.0.0.1:5557" - }, - "ZMQOption": { - "SendAddress": "tcp://127.0.0.1:5556", - "ReceiveAddress": "tcp://127.0.0.1:5557" - } + "EventBusStore": "MongoDB", + "EventBusMQ": "RabbitMQ", + "TelemetryStorage": "Taos" } \ No newline at end of file diff --git a/docker-compose.override.yml b/docker-compose.override.yml index 8527037f..4ec25cff 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -1,5 +1,4 @@ version: '3.4' - services: iotsharp: image: ${DOCKER_REGISTRY-}iotsharp diff --git a/docker-compose.yml b/docker-compose.yml index a398cbbf..4b71a2c9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,7 +5,7 @@ services: container_name: pgsql restart: always volumes: - - "./postgresql:/var/lib/postgresql/data" + - "./data/postgresql:/var/lib/postgresql/data" environment: TZ: "Asia/Shanghai" POSTGRES_USER: postgres @@ -55,10 +55,38 @@ services: networks: - iotsharp-network - + rabbitmq: + image: rabbitmq:management + container_name: rabbitmq + restart: always + hostname: mq + ports: + - 15672:15672 + - 5672:5672 + volumes: + - ./data/rabbitmq:/var/lib/rabbitmq + environment: + - RABBITMQ_DEFAULT_USER=root + - RABBITMQ_DEFAULT_PASS=kissme + networks: + - iotsharp-network + + mongodb: + image: mongo:latest + restart: always + container_name: mongodb + volumes: + - ./data/mongodb/db:/data/db + - ./data/mongodb/log:/var/log/mongodb + ports: + - 27017:27017 + environment: + MONGO_INITDB_ROOT_USERNAME: root + MONGO_INITDB_ROOT_PASSWORD: kissme + networks: + - iotsharp-network + networks: iotsharp-network: driver: bridge - - -- GitLab