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

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