diff --git a/src/JiShe.CollectBus.Application/Samples/SampleAppService.cs b/src/JiShe.CollectBus.Application/Samples/SampleAppService.cs index 9c2a86f..4b62555 100644 --- a/src/JiShe.CollectBus.Application/Samples/SampleAppService.cs +++ b/src/JiShe.CollectBus.Application/Samples/SampleAppService.cs @@ -6,6 +6,7 @@ using JiShe.CollectBus.FreeSql; using JiShe.CollectBus.IoTDBProvider; using JiShe.CollectBus.IotSystems.PrepayModel; using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; namespace JiShe.CollectBus.Samples; @@ -20,11 +21,12 @@ public class SampleAppService : CollectBusAppService, ISampleAppService } - public async Task AddReadingAsync() + [HttpGet] + public async Task AddReadingAsync(int buildTabletMode = 1) { ElectricityMeter meter = new ElectricityMeter() { - SystemName = "Energy", + SystemName = "energy", DeviceId = "402440506", DeviceType = "Ammeter", Current = 10, @@ -32,7 +34,7 @@ public class SampleAppService : CollectBusAppService, ISampleAppService ProjectCode = "10059", Voltage = 10 }; - await _iotDBProvider.InsertAsync(meter,2); + await _iotDBProvider.InsertAsync(meter, buildTabletMode); } public Task GetAsync() diff --git a/src/JiShe.CollectBus.Host/JiShe.CollectBus.Host.csproj b/src/JiShe.CollectBus.Host/JiShe.CollectBus.Host.csproj index b70752b..7d9bc47 100644 --- a/src/JiShe.CollectBus.Host/JiShe.CollectBus.Host.csproj +++ b/src/JiShe.CollectBus.Host/JiShe.CollectBus.Host.csproj @@ -58,6 +58,12 @@ + + + Always + + + Always diff --git a/src/JiShe.CollectBus.Host/appsettings.json b/src/JiShe.CollectBus.Host/appsettings.json index b506272..05c99de 100644 --- a/src/JiShe.CollectBus.Host/appsettings.json +++ b/src/JiShe.CollectBus.Host/appsettings.json @@ -73,18 +73,12 @@ "Version": "V1" } ], - "Cap": { - "RabbitMq": { - "HostName": "118.190.144.92", - "UserName": "collectbus", - "Password": "123456", - "Port": 5672 - } - }, "IoTDBOptions": { "UserName": "root", "Password": "root", - "ClusterList": [ "192.168.56.102:6667"], - "PoolSize": 10 + "ClusterList": [ "192.168.56.102:6667" ], + "PoolSize": 10, + "DataBaseName": "energy", + "OpenDebugMode": true } } \ No newline at end of file diff --git a/src/JiShe.CollectBus.IoTDBProvider/Options/IoTDBOptions.cs b/src/JiShe.CollectBus.IoTDBProvider/Options/IoTDBOptions.cs index 5cdd256..6a762b1 100644 --- a/src/JiShe.CollectBus.IoTDBProvider/Options/IoTDBOptions.cs +++ b/src/JiShe.CollectBus.IoTDBProvider/Options/IoTDBOptions.cs @@ -11,6 +11,11 @@ namespace JiShe.CollectBus.IoTDBProvider /// public class IoTDBOptions { + /// + /// 数据库名称 + /// + public string DataBaseName { get; set; } + /// /// 集群列表 /// @@ -28,5 +33,10 @@ namespace JiShe.CollectBus.IoTDBProvider /// 连接池大小 /// public int PoolSize { get; set; } = 3; + + /// + /// 是否开启调试模式,生产环境请关闭,因为底层的实现方式,可能会导致内存持续增长。 + /// + public bool OpenDebugMode { get; set;} } } diff --git a/src/JiShe.CollectBus.IoTDBProvider/Provider/DevicePathBuilder.cs b/src/JiShe.CollectBus.IoTDBProvider/Provider/DevicePathBuilder.cs index 3166ca6..cfab5c2 100644 --- a/src/JiShe.CollectBus.IoTDBProvider/Provider/DevicePathBuilder.cs +++ b/src/JiShe.CollectBus.IoTDBProvider/Provider/DevicePathBuilder.cs @@ -12,14 +12,14 @@ namespace JiShe.CollectBus.IoTDBProvider public static class DevicePathBuilder { /// - /// 构建设备路径 + /// 构建设备路径,由于路径的层级约束规范不能是纯数字字符,所以需要做特殊处理。 /// /// /// /// public static string GetDeviceId(T entity) where T : IoTEntity { - return $"root.{entity.SystemName}.{entity.ProjectCode}.{entity.DeviceId}"; + return $"root.{entity.SystemName.ToLower()}.`{entity.ProjectCode}`.`{entity.DeviceId}`"; } @@ -32,7 +32,7 @@ namespace JiShe.CollectBus.IoTDBProvider public static string GetTableName() where T : IoTEntity { var type = typeof(T); - return $"{type.Name}"; + return $"{type.Name.ToLower()}"; } } diff --git a/src/JiShe.CollectBus.IoTDBProvider/Provider/IoTDBProvider.cs b/src/JiShe.CollectBus.IoTDBProvider/Provider/IoTDBProvider.cs index 39e07c0..b911876 100644 --- a/src/JiShe.CollectBus.IoTDBProvider/Provider/IoTDBProvider.cs +++ b/src/JiShe.CollectBus.IoTDBProvider/Provider/IoTDBProvider.cs @@ -32,10 +32,18 @@ namespace JiShe.CollectBus.IoTDBProvider .SetNodeUrls(_options.ClusterList) .SetUsername(_options.UserName) .SetPassword(_options.Password) + .SetDatabase(_options.DataBaseName) .SetFetchSize(_options.PoolSize) .Build(); _sessionPool.Open(false).Wait(); + if (_options.OpenDebugMode) + { + _sessionPool.OpenDebugMode(builder => + { + builder.AddConsole(); + }); + } _logger = logger; } @@ -50,7 +58,11 @@ namespace JiShe.CollectBus.IoTDBProvider var metadata = GetMetadata(); var tablet = BuildTablet(new[] { entity }, metadata, buildTabletMode); - await _sessionPool.InsertAsync(tablet); + var result = await _sessionPool.InsertAsync(tablet); + if (result <=0) + { + _logger.LogWarning($"{typeof(T).Name}插入数据没有成功"); + } } /// @@ -69,7 +81,11 @@ namespace JiShe.CollectBus.IoTDBProvider foreach (var batch in batches) { var tablet = BuildTablet(batch, metadata, buildTabletMode); - await _sessionPool.InsertAsync(tablet); + var result = await _sessionPool.InsertAsync(tablet); + if (result <= 0) + { + _logger.LogWarning($"{typeof(T).Name} 批量插入数据第{batch}批次没有成功,共{batches}批次。"); + } } } @@ -320,61 +336,6 @@ namespace JiShe.CollectBus.IoTDBProvider var metadata = BuildDeviceMetadata(columns); return metadata; }); - - //return _metadataCache.GetOrAdd(typeof(T), type => - //{ - // var metadata = new DeviceMetadata(); - // List> columns = new(); - // foreach (var prop in type.GetProperties()) - // { - // //标签列 - // var attrTAG = prop.GetCustomAttribute(); - // if (attrTAG != null) - // { - // columns.Add(Tuple.Create(prop.PropertyType.Name, ColumnCategory.TAG, GetDataTypeFromStr(prop.PropertyType.Name))); - // continue; - // } - - // //属性列 - // var attrATTRIBUTE = prop.GetCustomAttribute(); - // if (attrATTRIBUTE != null) - // { - // columns.Add(Tuple.Create(prop.PropertyType.Name, ColumnCategory.ATTRIBUTE, GetDataTypeFromStr(prop.PropertyType.Name))); - // continue; - // } - - // //数据列 - // var attrFIELD = prop.GetCustomAttribute(); - // if (attrFIELD != null) - // { - // columns.Add(Tuple.Create(prop.PropertyType.Name, ColumnCategory.FIELD, GetDataTypeFromStr(prop.PropertyType.Name))); - // } - // } - // var columnCategories = EnumExtensions.ToEnumDictionary(); - // foreach (var item in columnCategories) - // { - // if (item.Value == ColumnCategory.TAG) - // { - // metadata.ColumnNames.AddRange(columns.Where(d => d.Item2 == ColumnCategory.FIELD).Select(d => d.Item1).ToList()); - // metadata.ColumnCategories.AddRange(columns.Where(d => d.Item2 == ColumnCategory.TAG).Select(d => d.Item2).ToList()); - // metadata.DataTypes.AddRange(columns.Where(d => d.Item2 == ColumnCategory.TAG).Select(d => d.Item3).ToList()); - // } - // else if (item.Value == ColumnCategory.ATTRIBUTE) - // { - // metadata.ColumnNames.AddRange(columns.Where(d => d.Item2 == ColumnCategory.ATTRIBUTE).Select(d => d.Item1).ToList()); - // metadata.ColumnCategories.AddRange(columns.Where(d => d.Item2 == ColumnCategory.ATTRIBUTE).Select(d => d.Item2).ToList()); - // metadata.DataTypes.AddRange(columns.Where(d => d.Item2 == ColumnCategory.ATTRIBUTE).Select(d => d.Item3).ToList()); - // } - // else if (item.Value == ColumnCategory.FIELD) - // { - // metadata.ColumnNames.AddRange(columns.Where(d => d.Item2 == ColumnCategory.FIELD).Select(d => d.Item1).ToList()); - // metadata.ColumnCategories.AddRange(columns.Where(d => d.Item2 == ColumnCategory.FIELD).Select(d => d.Item2).ToList()); - // metadata.DataTypes.AddRange(columns.Where(d => d.Item2 == ColumnCategory.FIELD).Select(d => d.Item3).ToList()); - // } - // } - - // return metadata; - //}); } ///