using Apache.IoTDB; using Apache.IoTDB.DataStructure; using JiShe.CollectBus.IoTDB.Interface; using JiShe.CollectBus.IoTDB.Options; using Microsoft.Extensions.Logging; namespace JiShe.CollectBus.IoTDB.Provider { /// /// 表模型Session连接池 /// public class TableSessionPoolAdapter : IIoTDbSessionPool { private readonly TableSessionPool _sessionPool; private readonly IoTDbOptions _options; /// /// TableSessionPoolAdapter /// /// public TableSessionPoolAdapter(IoTDbOptions options) { _options = options; _sessionPool = new TableSessionPool.Builder() .SetNodeUrls(options.ClusterList) .SetUsername(options.UserName) .SetPassword(options.Password) .SetFetchSize(options.FetchSize) .SetPoolSize(options.PoolSize) .SetDatabase(options.DataBaseName) .Build(); } /// /// 打开连接池 /// /// public async Task OpenAsync() { await _sessionPool.Open(false); if (_options.OpenDebugMode) { _sessionPool.OpenDebugMode(builder => builder.AddConsole()); } } /// /// 批量插入 /// /// /// public async Task InsertAsync(Tablet tablet) { var result = await _sessionPool.InsertAsync(tablet); if (result != 0) { throw new Exception($"{nameof(TableSessionPoolAdapter)} table模型数据入库没有成功,返回结果为:{result}"); } return result; } /// /// 查询数据 /// /// /// public async Task ExecuteQueryStatementAsync(string sql) { return await _sessionPool.ExecuteQueryStatementAsync(sql); } public void Dispose() { _sessionPool?.Close().ConfigureAwait(false).GetAwaiter().GetResult(); } } }