我有一條路線 Producer -> Split -> Processor 并且在處理器中,我試圖找出當前正在處理的交換是否是最后一個被拆分的交換。
根據駱駝拆分檔案,每個已拆分的駱駝交換中都有三個屬性。CamelSplitIndex、CamelSplitSize 和 CamelSplitComplete。
使用 camel 3.0.0-RC3 時,我可以看到這些屬性在處理器類中被填充和可用。但是當使用版本 3.11.1 或 3.17.0 時,我沒有看到這些值被填充到交換中。
我在這里遺漏了什么還是這是一個駱駝蟲。
主類:
SpringApplication.run(CamelTestMain.class, args);
路線:
from("timer://simpleSplitTimer?period=1000000").process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
Trade trade1 = new Trade(1L, 15.4, 200, "WF");
Trade trade2 = new Trade(2L, 75.1, 100, "GS");
Trade trade3 = new Trade(3L, 20.0, 15, "JP");
List<Trade> tradeList = new ArrayList<>();
tradeList.add(trade1);
tradeList.add(trade2);
tradeList.add(trade3);
exchange.getIn().setHeader("GUITrade", "Y");
exchange.getIn().setBody(tradeList);
}
})
.to("direct:toSplit");
from("direct:toSplit").split(body()).to("direct:afterSplit1");
from("direct:afterSplit1").process(postSplitProcessor);
依賴項:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.11.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring-boot-starter</artifactId>
<version>3.0.0-RC3</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-jms</artifactId>
<version>3.0.0-RC3</version>
</dependency>
</dependencies>
uj5u.com熱心網友回復:
由于您尚未發布訪問Exchange屬性的代碼片段,我猜您正在使用Exchange#getProperties訪問已在Apache Camel版本3.9.0中優化/重構的不同屬性:
Exchange 上的屬性已被優化為分為兩部分:內部狀態與用戶屬性。getProperties() 方法現在只回傳用戶屬性。要同時包含內部屬性,請使用 getAllProperties()。getProperty(String) 等其他 API 的作業方式與以前相同,能夠查找屬性,無論其是內部屬性還是自定義屬性。
您應該能夠訪問拆分相關的屬性:
要么切換到使用
Exchange#getAllProperties:exchange.getAllProperties().get("CamelSplitIndex");或者更好地使用更安全的
Exchange#getProperty(ExchangePropertyKey):exchange.getProperty(ExchangePropertyKey.SPLIT_INDEX);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/497603.html
上一篇:如何在不同環境下運行API自動化測驗腳本,特別是我需要在QA環境和prod環境中運行
下一篇:當我設定spring.active.profile時Springboot不讀取Application.yml檔案
