我有一条简单的路线: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
提交
取消