我有一條簡單的路線:direct:in -> step1 -> step2 -> stepN -> direct:out我想像函數調用一樣使用它:consumer = camelContext.createConsumerTemplate()
producer = camelContext.createProducerTemplate()
producer.sendBody("direct:int", body)
consumer.receiveBody("direct:out", TYPE)問題是當我調用producer.sendBody(...)線程時被阻塞。另外,由于線程被阻塞,我無法使用消費者,所以結果我得到了一個沒有消費者的異常direct:out。我可以為消費者使用另一個線程,但我的目標是使用駱駝路線作為具有輸入和輸出的函數。另外,我可以使用producer.asyncSendBody(...),但這是正確的方法嗎?這種方法允許我使用 來消費消息consumer,但我認為應該有另一種方法。
1 回答

撒科打諢
TA貢獻1934條經驗 獲得超2個贊
在不知道步驟 1、2、N 正在做什么的情況下,不可能明確地說出發生了什么,但假設它們沒有阻塞,那么您所看到的是因為在某些東西消耗該交換之前無法完成direct:out
。因為那個電話是在sendBody()
它無法完成之后發出的——正如你所看到的。
您有三個選擇(也許更多):
asyncSendBody()
按照您的說明使用。將 Exchange從哪個隊列更改
direct:out
為seda:out
允許發送完成并繼續接收。刪除
"direct:out"
端點并更改為sendBody(Endpoint, Object)
將sendBody(Endpoint, ExchangePattern, Object)
最終結果主體返回給調用者。
選項 3 似乎是您想要做的,而且更簡單。
添加回答
舉報
0/150
提交
取消