gpt4 book ai didi

java - Apache Camel 路由拆分器不返回原始消息

转载 作者:行者123 更新时间:2023-12-02 05:27:14 25 4
gpt4 key购买 nike

根据the Splitter documentation ,在 Camel 2.3 或更高版本中,Splitter 应返回原始消息。我们使用的是 2.13.2,但在 split() 之后,主体似乎是最后一个拆分消息的主体(即 Camel 2.2 描述的行为)。

我们的路线如下:

    from(INPUT_SERVICE_ENDPOINT_URI)
.wireTap(SAVE_COPY_OF_INPUT)
.unmarshal(jaxbFormat)
.process(createAuditRecord())
.bean(webServiceValidator)
.process(updateAuditRecord())
.split(body())
.choice()
.when(simple("${body.second.rejected}"))
.log(LoggingLevel.DEBUG, LOGGER_NAME, "Skipping import as it was rejected")
.otherwise()
.to(ExchangePattern.InOnly, IMPORT_QUEUE_ENDPOINT_URI)
.endChoice()
.end()
.process(createWebServiceResponse())
.marshal(jaxbFormat);

这个想法是单个 Web 服务请求包含多个要导入的项目。整个输入消息均经过验证 (webServiceValidator),消息正文由该 validator 转换为项目列表。然后,我们拆分这些项目,以便它们将由导入队列单独处理。

createWebServiceResponse 处理器假定消息正文将与拆分之前一样(即项目列表),但是正文似乎只包含单个项目(最后一个要处理的项目)。

这种行为正确吗? Splitter 文档是错误的还是我误解了它?或者我们在路由定义中做错了什么?

我意识到我没有实现聚合策略,就像文档中提到的其他示例一样,但我希望如果我可以获得拆分之前的消息副本,就可以避免这样做.

最佳答案

此行为是因为我没有正确关闭“选择” block 而引起的。即路线应如下所示:

from(INPUT_SERVICE_ENDPOINT_URI)
.wireTap(SAVE_COPY_OF_INPUT)
.unmarshal(jaxbFormat)
.process(createAuditRecord())
.bean(webServiceValidator)
.process(updateAuditRecord())
.split(body())
.choice()
.when(simple("${body.second.rejected}"))
.log(LoggingLevel.DEBUG, LOGGER_NAME, "Skipping import as it was rejected")
.otherwise()
.to(ExchangePattern.InOnly, IMPORT_QUEUE_ENDPOINT_URI)
.endChoice()
.end()
.end()
.process(createWebServiceResponse())
.marshal(jaxbFormat);

关于java - Apache Camel 路由拆分器不返回原始消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25892370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com