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线程,就像我上面的例子一样。
答案 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"/>