【问题标题】:Rhino ETL - cancel EtlProcess part way throughRhino ETL - 中途取消 EtlProcess
【发布时间】:2014-02-04 10:22:10
【问题描述】:

我有一个 Rhino ETL 进程,它执行几个顺序操作,第一个是转到 SQL Server 数据库并检索一些行(即整个过程的“提取”部分)。

如果在此阶段没有返回任何行,我想制造 EtlProcess 炸弹。我该怎么办?我尝试了覆盖OnFinishedProcessing(),但我看不到明显的方式来表明EtlProcess 应该被炸毁。

到目前为止我所拥有的:

protected override void OnFinishedProcessing(IOperation op)
{
    var sqlExtractionOperation = op as SqlExtractionOperation;
    if (sqlExtractionOperation != null)
    {
        if (sqlExtractionOperation.Statistics.OutputtedRows == 0)
        {
            //TODO: figure out how to make it stop here
        }
    }

    base.OnFinishedProcessing(op);
}

【问题讨论】:

    标签: c# rhino-etl


    【解决方案1】:

    我的解决方案是告诉EtlProcess 以单线程模式执行。

    默认情况下,每个 Rhino ETL 操作都在单独的工作线程上执行,这意味着由单个操作引发的任何异常都会被默认吞下。 (排队的工作线程依次等待彼此的数据通过 - 至少,这是我从源代码的快速调试中得到的)

    要让EtlProcess 在单线程模式下执行,只需将其添加到其构造函数中:

    PipelineExecuter = new SingleThreadedPipelineExecuter();
    

    在任何进程的操作中抛出异常都会导致整个进程崩溃。您可以通过覆盖PostProcessing() 在流程结束时记录错误:

    protected override void PostProcessing()
    {
        base.PostProcessing();
    
        if (!PipelineExecuter.HasErrors)
            Info("Process completed successfully");
        else
            Warn("Process failed");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多