我遇到了Camel 2.19.1的問題。和onCompletion
具有路由範圍的處理程序。運行時是Java 8,Karaf 4.0.9。駱駝上下文是用藍圖構建的。on處理器路由範圍在路由中間觸發
我與每次onCompletion處理程序中定義3條路線:
<onCompletion mode="BeforeConsumer" parallelProcessing="false" onCompleteOnly="true" useOriginalMessage="false">
<log message="<route_name> Success." loggingLevel="INFO" logName="policy-repository-adapter" />
</onCompletion>
三個呼叫路由通過direct
端點彼此,像這樣:
pra-soap-endpoint -> direct:xacml-policy-query -> direct:send-to-pas-endpoint
頂級路線pra-soap-endpoint
樣子這個(僞碼,很明顯):
route pra-soap-endpoint
process
log "route checkpoint 1"
to direct:xacml-policy-query
log "route checkpoint 2"
process
end route
從頂級路線和onCompletion處理程序的輸出日誌是這樣的:
route checkpoint 1
send-to-pas-endpoint Success.
xacml-policy-query Success.
pra-soap-endpoint Success.
route checkpoint 2
send-to-pas-endpoint Success.
xacml-policy-query Success.
pra-soap-endpoint Success.
send-to-pas-endpoint Success.
xacml-policy-query Success.
pra-soap-endpoint Success.
注意,onCompletion處理器被解僱了多次。最重要的是,頂層路由的onCompletion處理程序在路由實際完成之前觸發(日誌語句route checkpoint 2
之前的日誌語句pra-soap-endpoint Success.
)。
我期待什麼是這樣的:
route checkpoint 1
send-to-pas-endpoint Success.
xacml-policy-query Success.
route checkpoint 2
pra-soap-endpoint Success.
這是駱駝或錯誤有關onCompletion
處理程序是如何工作的在我結束一個誤解?
我看到3'xacml-policy-query Success.'行。難道你的路由是並行觸發的,多線程正在執行它嗎?嘗試在日誌中添加線程名稱。 –
@AlessandroDaRugna,這只是我從測試客戶端發送POST。對於我發送的每個POST,我都使用相同的線程名稱和麪包屑ID來獲取日誌輸出。 – Ralf