我有一个我正在处理的 CSV,格式如下:
01,H2,H3
02,B2,B3,B4,B5
02,B2,B3,B4,B5
02,B2,B3,B4,B5
02,B2,B3,B4,B5
01,H2,H3
02,B2,B3,B4,B5
02,B2,B3,B4,B5
01,H2,H3
02,B2,B3,B4,B5
02,B2,B3,B4,B5
02,B2,B3,B4,B5
01 指定标题行,02 指定正文行。
我需要获取标头数据并将其添加到正文消息中,因此我最终会发送如下消息:
H2,H3,B2,B3,B4,B5
H2,H3,B2,B3,B4,B5
H2,H3,B2,B3,B4,B5
我尝试聚合,但在这种情况下这似乎不是正确的 EIP,因为我只是一遍又一遍地将相同的消息组合在一起,而不是将多条消息合二为一……从根本上讲,我需要访问标头数据以处理正文(实际上它只是一个字段)。我只是不知道如何设置变量,因为每次交换都会清除标题和属性。有小费吗?提前致谢。让我知道看看骆驼路线的现状是否会有所帮助。
这是骆驼路线,可能会有所帮助:
from("direct:inventory")
.split(body().tokenize("\n")).streaming()
.throttle(100)
.choice()
.when(property("CamelSplitComplete").isEqualTo(true))
.log("Processed ${property.CamelSplitSize} updates")
.end()
.unmarshal(csv)
.log("${body}")
.aggregate(header("CamelFileLastModified"), new InventoryAggregationStrategy())
.completionPredicate(header("aggregationComplete").isEqualTo(true))
.to("freemarker://templates/inventory.ftl")
.unmarshal().string("UTF-8")
.unmarshal().json(JsonLibrary.Jackson)
.convertBodyTo(JsonObject.class)
.to("endpoint");