如何使用Apache Camel加载一个文件?

时间:2017-02-06 22:20:19

标签: java apache-camel

Apache Camel对各种协议(如FTP和“文件”)提供了非常好的支持,我想用它来加载单个文件并将其转换一下。

我理解如何使用RouteBuilder和CamelContext.start()来实现这一点,但是我不想在无限循环中使用后台守护进程,也不需要复杂的路由。

我该怎么做:

public class ColorizeSearchResults : DocumentColorizingTransformer {

    public ColorizeSearchResults() : base() {
        SearchTerm = "";
        MatchCase = false;
    }

    public string SearchTerm { get; set; }
    public bool MatchCase { get; set; }

    protected override void ColorizeLine(DocumentLine line) {
        if (SearchTerm.Length == 0)
            return;

        int lineStartOffset = line.Offset;
        string text = CurrentContext.Document.GetText(line);
        int count = 0;
        int start = 0;
        int index;
        while ((index = text.IndexOf(SearchTerm, start, MatchCase ? StringComparison.CurrentCulture : StringComparison.CurrentCultureIgnoreCase)) >= 0) {
            base.ChangeLinePart(
                lineStartOffset + index,
                lineStartOffset + index + SearchTerm.Length,
                (VisualLineElement element) => {
                    element.TextRunProperties.SetForegroundBrush(Brushes.White);
                    element.TextRunProperties.SetBackgroundBrush(Brushes.Magenta);
                });
            start = index + 1;
            count++;
        }
    }
}

我确实阅读了一些关于如何使用“controlbus?action = stop”或“timer?repeat = 1”或类似方法停止路由的答案,但那些仍然将Camel作为新线程启动,然后使用一些hack来阻止它。我不是在寻找一个复杂的解决方案,以某种方式管理它,而是想知道Camel是否能够用于精简10线程,就像我上面的例子一样。

1 个答案:

答案 0 :(得分:1)

您可以使用pollEnricht功能,请参阅http://camel.apache.org/content-enricher.html

例如,您也可以使用ftp端点而不是文件端点:

<route>
 <from uri="direct:start"/>
  <pollEnrich>
   <constant>file:inbox?fileName=data.txt</constant>
  </pollEnrich>
<to uri="direct:result"/>