修复获取cachekey错误问题
output使用ThreadPool.QueueUserWorkItem
This commit is contained in:
parent
e3f6ecbd91
commit
f167256082
@ -77,33 +77,33 @@ public class MainHostedService : BackgroundService
|
||||
};
|
||||
var bigTableContext = new ProcessContext();
|
||||
var bigTableOptions = new TasksOptions { TableInfoConfig = bigTablesDic, OutPutOptions = new OutPutOptions { FlushCount = 10000, OutPutTaskCount = 2 } };
|
||||
//taskFun(bigTableOptions,new DataRecordQueue(), new DataRecordQueue(), bigTableContext);
|
||||
taskFun(bigTableOptions,new DataRecordQueue(), new DataRecordQueue(), bigTableContext);
|
||||
var smallTablesDic = new Dictionary<string, TableInfo>
|
||||
{
|
||||
//{"machine",new TableInfo{SimulaRowCount=14655 }},
|
||||
//{"order",new TableInfo{SimulaRowCount=5019216 }},
|
||||
//{"order_data_block",new TableInfo{SimulaRowCount=731800334 }},
|
||||
//{"order_data_goods",new TableInfo{SimulaRowCount=25803671 }},
|
||||
//{"order_data_parts",new TableInfo{SimulaRowCount=468517543 }},
|
||||
//{"order_module",new TableInfo{SimulaRowCount=103325385 }},
|
||||
//{"order_module_extra",new TableInfo{SimulaRowCount=54361321 }},
|
||||
//{"order_module_item",new TableInfo{SimulaRowCount=69173339 }},
|
||||
//{"order_package",new TableInfo{SimulaRowCount=16196195 }},
|
||||
{"machine",new TableInfo{SimulaRowCount=14655 }},
|
||||
{"order",new TableInfo{SimulaRowCount=5019216 }},
|
||||
{"order_data_block",new TableInfo{SimulaRowCount=731800334 }},
|
||||
{"order_data_goods",new TableInfo{SimulaRowCount=25803671 }},
|
||||
{"order_data_parts",new TableInfo{SimulaRowCount=468517543 }},
|
||||
{"order_module",new TableInfo{SimulaRowCount=103325385 }},
|
||||
{"order_module_extra",new TableInfo{SimulaRowCount=54361321 }},
|
||||
{"order_module_item",new TableInfo{SimulaRowCount=69173339 }},
|
||||
{"order_package",new TableInfo{SimulaRowCount=16196195 }},
|
||||
{"order_process",new TableInfo{SimulaRowCount=3892685 }},//orderNo < 202301的
|
||||
{"order_process_step",new TableInfo{SimulaRowCount=8050349 }},//orderNo < 202301的删除
|
||||
{"order_process_step_item",new TableInfo{SimulaRowCount=14538058 }},//orderNo < 202301的删除
|
||||
//{"order_scrap_board",new TableInfo{SimulaRowCount=123998 }},
|
||||
//{"process_group",new TableInfo{SimulaRowCount=1253 }},
|
||||
//{"process_info",new TableInfo{SimulaRowCount=7839 }},
|
||||
//{"process_item_exp",new TableInfo{SimulaRowCount=28 }},
|
||||
//{"process_schdule_capacity",new TableInfo{SimulaRowCount=39736 }},
|
||||
//{"process_step_efficiency",new TableInfo{SimulaRowCount=8 }},
|
||||
//{"report_template",new TableInfo{SimulaRowCount=7337 }},
|
||||
//{"simple_package",new TableInfo{SimulaRowCount=130436 }},//orderNo < 202301的删除
|
||||
//{"sys_config",new TableInfo{SimulaRowCount=2296 }},
|
||||
//{"work_calendar",new TableInfo{SimulaRowCount=11 }},
|
||||
//{"work_shift",new TableInfo{SimulaRowCount=59 }},
|
||||
//{"work_time",new TableInfo{SimulaRowCount=62 }},
|
||||
{"order_scrap_board",new TableInfo{SimulaRowCount=123998 }},
|
||||
{"process_group",new TableInfo{SimulaRowCount=1253 }},
|
||||
{"process_info",new TableInfo{SimulaRowCount=7839 }},
|
||||
{"process_item_exp",new TableInfo{SimulaRowCount=28 }},
|
||||
{"process_schdule_capacity",new TableInfo{SimulaRowCount=39736 }},
|
||||
{"process_step_efficiency",new TableInfo{SimulaRowCount=8 }},
|
||||
{"report_template",new TableInfo{SimulaRowCount=7337 }},
|
||||
{"simple_package",new TableInfo{SimulaRowCount=130436 }},//orderNo < 202301的删除
|
||||
{"sys_config",new TableInfo{SimulaRowCount=2296 }},
|
||||
{"work_calendar",new TableInfo{SimulaRowCount=11 }},
|
||||
{"work_shift",new TableInfo{SimulaRowCount=59 }},
|
||||
{"work_time",new TableInfo{SimulaRowCount=62 }},
|
||||
};
|
||||
var smallTableContext = new ProcessContext();
|
||||
taskFun(new TasksOptions { TableInfoConfig = smallTablesDic, OutPutOptions = new OutPutOptions { FlushCount = 20000, OutPutTaskCount = 4 } },
|
||||
|
@ -47,13 +47,11 @@ public class OutputService : IOutputService
|
||||
records.Add(record);
|
||||
if (records.Count >= tasksOptions.OutPutOptions.FlushCount)
|
||||
{
|
||||
var temp= new List<DataRecord>();
|
||||
temp.AddRange(records);
|
||||
|
||||
var temp= new List<DataRecord>(records);
|
||||
ThreadPool.QueueUserWorkItem(async (queueState) =>
|
||||
{
|
||||
await FlushAsync(temp);
|
||||
});
|
||||
{
|
||||
await FlushAsync(temp);
|
||||
});
|
||||
|
||||
records.Clear();
|
||||
}
|
||||
@ -65,15 +63,12 @@ public class OutputService : IOutputService
|
||||
}
|
||||
if (records.Count > 0)
|
||||
{
|
||||
var temp = new List<DataRecord>();
|
||||
temp.AddRange(records);
|
||||
var temp = new List<DataRecord>(records);
|
||||
ThreadPool.QueueUserWorkItem(async (queueState) =>
|
||||
{
|
||||
await FlushAsync(temp);
|
||||
});
|
||||
records.Clear();
|
||||
context.AddFinishTask();
|
||||
_logger.LogInformation("***** Finished Tasks Count:{FinishTaskCount} *****", context.FinishTaskCount);
|
||||
_logger.LogInformation("***** Mysql output thread completed *****");
|
||||
}
|
||||
}
|
||||
|
@ -179,16 +179,24 @@ async Task RunProgram()
|
||||
//if(record.TryGetField("OrderProcessID",out var orderProcessID))
|
||||
|
||||
|
||||
var value = await cache.GetStringAsync(record.GetCacheKey("OrderProcessID"));
|
||||
if (string.IsNullOrEmpty(value))return false;
|
||||
if(record.TryGetField("OrderProcessID",out string orderProcessID))
|
||||
{
|
||||
var value = await cache.GetStringAsync($"order_process_{orderProcessID}");
|
||||
if (string.IsNullOrEmpty(value)) return false;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
if (record.TableName == "order_block_plan_result" )
|
||||
{
|
||||
//如果缓存中不存在ID,则丢弃(ID 对应order_block_plan中的ID)
|
||||
|
||||
var value = await cache.GetStringAsync(record.GetCacheKey("ID"));
|
||||
if (record.TryGetField("ID", out string id))
|
||||
{
|
||||
var value = await cache.GetStringAsync($"order_block_plan_{id}");
|
||||
if (string.IsNullOrEmpty(value)) return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
return true;
|
||||
@ -292,7 +300,7 @@ async Task RunProgram()
|
||||
var headers = new List<string>(record.Headers);
|
||||
var fields =new List<string>(record.Fields);
|
||||
headers.Add("CompanyID");
|
||||
var companyidResult =await cache.GetStringAsync(record.GetCacheKey("ID"));
|
||||
var companyidResult =await cache.GetStringAsync($"order_block_plan_{id}");
|
||||
|
||||
_ = int.TryParse(companyidResult, out var companyid);
|
||||
fields.Add(companyid.ToString());
|
||||
@ -308,7 +316,7 @@ async Task RunProgram()
|
||||
var headers = new List<string>(record.Headers);
|
||||
var fields = new List<string>(record.Fields);
|
||||
headers.Add("CompanyID");
|
||||
var companyidResult = await cache.GetStringAsync(record.GetCacheKey("OrderNo"));
|
||||
var companyidResult = await cache.GetStringAsync($"order_{orderNo}");
|
||||
_ = int.TryParse(companyidResult, out var cpid);
|
||||
fields.Add(cpid.ToString());
|
||||
return new DataRecord(fields.ToArray(), record.TableName, headers.ToArray(), cpid);
|
||||
@ -350,7 +358,7 @@ async Task RunProgram()
|
||||
{
|
||||
if (record.TryGetField("OrderProcessID",out var processID))
|
||||
{
|
||||
var shardKey =await cache.GetStringAsync(record.GetCacheKey("OrderProcessID"));
|
||||
var shardKey =await cache.GetStringAsync($"order_process_{processID}");
|
||||
var headers = new List<string>(record.Headers);
|
||||
var fields = new List<string>(record.Fields);
|
||||
headers.Add("ShardKey");
|
||||
@ -478,7 +486,7 @@ async Task RunProgram()
|
||||
|
||||
host.Services.AddHostedService<MainHostedService>();
|
||||
host.Services.AddHostedService<TaskMonitorService>();
|
||||
host.Services.AddSingleton<IInputService, InputService>();
|
||||
host.Services.AddSingleton<IInputService, InputService>();
|
||||
host.Services.AddSingleton<ITransformService, TransformService>();
|
||||
host.Services.AddSingleton<IOutputService, OutputService>();
|
||||
var redisOptions = host.Configuration.GetSection("RedisCacheOptions").Get<RedisCacheOptions>() ?? new RedisCacheOptions();
|
||||
|
@ -37,12 +37,6 @@ public class ProcessContext
|
||||
{
|
||||
_exceptionList.Add(ex);
|
||||
}
|
||||
|
||||
public void AddFinishTask() => Interlocked.Increment(ref _finishedTaskCount);
|
||||
public int FinishTaskCount
|
||||
{
|
||||
get => _finishedTaskCount;
|
||||
}
|
||||
public ConcurrentBag<Exception> GetExceptions()
|
||||
{
|
||||
return _exceptionList;
|
||||
|
@ -16,17 +16,15 @@ namespace ConsoleApp2.SimulationService
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
private readonly IOptions<DataInputOptions> _dataInputOptions;
|
||||
private readonly DataRecordQueue _producerQueue;
|
||||
|
||||
private readonly ProcessContext _context;
|
||||
|
||||
public SimulationInputService(ILogger<InputService> logger,
|
||||
IOptions<DataInputOptions> dataInputOptions,
|
||||
[FromKeyedServices(ProcessStep.Producer)] DataRecordQueue producerQueue,
|
||||
ProcessContext context)
|
||||
{
|
||||
_logger = logger;
|
||||
_dataInputOptions = dataInputOptions;
|
||||
_producerQueue = producerQueue;
|
||||
_context = context;
|
||||
}
|
||||
public async Task ExecuteAsync(TasksOptions tasksOptions, DataRecordQueue producerQueue, ProcessContext context, CancellationToken cancellationToken)
|
||||
@ -113,7 +111,7 @@ namespace ConsoleApp2.SimulationService
|
||||
foreach (var rc in tempRecords)
|
||||
{
|
||||
_context.AddInput();
|
||||
_producerQueue.Enqueue(rc);
|
||||
producerQueue.Enqueue(rc);
|
||||
if (cancellationToken.IsCancellationRequested)
|
||||
return;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user