如何将骆驼消息 body 拆分成行以便在 Talend ESB 中迭代它们

How to split a camel message body into rows in order to iterate over them in Talend ESB

因此,正如标题所说,我正在使用 Talend ESB 来处理骆驼消息传递。在我的例子中,我将文件的内容作为消息 body 发送到 child Talend 作业。在某些情况下,文件的内容可能有 2 行以上。我所需要的只是能够在 child-job 本身内独立地迭代每一行。

我想我的问题是 2 折。 1.如果可能我该怎么做?和 2. 是更适合路由级别的迭代过程,还是 child-job 路由调用。

现在,我正在处理的文件是 | 分隔的。为了处理这个问题,我让 tRouteInput_1 直接转到 tExtractDelimtedFields 并使用这些值全局设置变量,就像这样。

问题是它只读取文件的第一行,然后继续。我需要能够遍历 file/camel 消息中的每一行。

谢谢, 亚历克斯

首先,您需要使用 tNormalize.
在行分隔符上拆分文件 在我的示例中,我通过使用包含整个文件的 tFixedFlowInput 来模拟您的 tRouteInput,行由 \n 分隔。然后对于 tNormalize 返回的每个结果行,提取您想要的字段(在 tExtractDelimitedFields 中,创建与您的行结构对应的模式):

结果:

.--------+--------.
|    tLogRow_1    |
|=-------+-------=|
|field1  |field2  |
|=-------+-------=|
|field1.1|field1.2|
|field2.1|field2.2|
|field3.1|field3.2|
'--------+--------'

您需要在 tExtractDelimitedFields 中使用“\|”转义“|”,因为该组件接受正则表达式,并且管道具有特殊含义。

关于你的第二个问题,我认为最好在子作业中而不是在路由中执行此操作,因为在路由视角中有专门的组件不可用。