Apache camel 骆驼路线响应与路线中的最后一点不同
我有一个场景,使用ApacheCamel 2.15.2版提供REST服务,允许创建概要文件。服务尝试将概要文件有效负载拆分为不同类型的多个对象(第1、2和3节),并将每个对象类型的创建委托给不同的应用程序。复杂的是,作为第1节的一部分创建的数据需要用于创建第2节和第3节。以下是一个示例路由定义:Apache camel 骆驼路线响应与路线中的最后一点不同,apache-camel,integration,Apache Camel,Integration,我有一个场景,使用ApacheCamel 2.15.2版提供REST服务,允许创建概要文件。服务尝试将概要文件有效负载拆分为不同类型的多个对象(第1、2和3节),并将每个对象类型的创建委托给不同的应用程序。复杂的是,作为第1节的一部分创建的数据需要用于创建第2节和第3节。以下是一个示例路由定义: rest("/v1/Profile") .post().consumes("application/json").produces("application/json")
rest("/v1/Profile")
.post().consumes("application/json").produces("application/json")
.type(Profile.class)
.description("Create a new profile")
.route()
// Save the original JSON payload into an exchange property
.setProperty(ORIGINAL_PAYLOAD_KEY, simple("${in.body}"))
// validate the payload
.to(postProfileValidationEndpoint)
// Extract Section 1 from the request
.marshal().json(JsonLibrary.Jackson)
.transform().jsonpath("$.section1")
.marshal().json(JsonLibrary.Jackson)
// send the request to Section 1 app
.to(section1Queue)
.unmarshal().json(JsonLibrary.Jackson, Section1.class)
// Save the profile id of the newly created section 1 instance
.setHeader("profileId", new JsonPathExpression("$.profileId"))
// Based on the original payload (see above), extract Section 2 and 3 as separate messages
.split().method("profileSplitter", "generateProfileCreateMessages")
.parallelProcessing()
.choice()
.when(header(SECTION_2_REQUEST))
.to(section2Queue)
.when(header(SECTION_3_REQUEST))
.to(section3Queue)
.end()
// consolidate responses from section 2 and 3 applications
.aggregate(header("breadcrumbId"), profileAggregationStrategy)
.completionTimeout(timeout)
.completionSize(exchangeProperty(COMPLETION_SIZE_PROPERTY))
.to("log:com.example.profile.route?level=DEBUG&showAll=true&multiline=true");
我看到的问题是,在路由的最末端的log语句,以我期望的方式打印响应体。但是,当我从PostMan调用此路由时,返回的是.unmarshal.jsonJsonLibrary.Jackson节1.class的结果
我已经尝试调试并启用了路由跟踪,但我还没有找到一个解释,解释为什么我确认的聚合结果没有返回预期的效果
有什么想法吗?聚合的输出与输入在一个单独的线程中运行。因此,日志记录是在REST响应发送回客户端之后进行的
拆分器具有内置聚合器,您可以使用它在同一请求中进行聚合,因此您可以将其用作REST响应的一部分。感谢您的回复。我想你的话可能会发生,但是,当我调试路由时,在我的自定义聚合策略完成之前,响应不会返回到客户端。FWIW,我还单独配置了聚合部分,以便可以使用自定义聚合策略类以及完成超时和完成大小条件。有没有办法做到这一点,并明确地将聚合器绑定到拆分的范围?