0
我有一個場景,我使用的是Apache Camel(版本2.15.2)來提供允許創建「配置文件」的REST服務。該服務嘗試將Profile有效載荷分成多個不同類型的對象(第1,2和3節),並將每個對象類型的創建委託給不同的應用程序。複雜之處有被用來創建第2 & 3.下面是一個例子路由的定義,作爲第1,需要的部分創建的數據:駱駝路由響應與我路由中的最後一點不同
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");
我看到的問題是,日誌語句在路線的最後,打印響應體的確切方式,我期望它。但是,當我從PostMan調用這條路由時,返回值是「.unmarshal()。json(JsonLibrary.Jackson,Section1.class)」的結果。
我試過調試和啓用跟蹤的路線,我還沒有找到解釋爲什麼我的聚合結果(我已確認工作正常)不返回。
任何想法?
感謝您的回覆。我認爲你說的話可能會發生,但是,當我調試路由時,直到我的自定義聚合策略完成後,響應纔會返回給客戶端。 FWIW,我還分別配置了聚合部分,因此我可以使用自定義聚合策略類以及完成超時和完成大小條件。有沒有辦法做到這一點,並明確將聚合器綁定到split()的範圍? – JJensL