猿问

如何在 apache camel 中正确使用直接组件?

我有一条简单的路线:

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,但我认为应该有另一种方法。


慕勒3428872
浏览 113回答 1
1回答

撒科打诨

在不知道步骤 1、2、N 正在做什么的情况下,不可能明确地说出发生了什么,但假设它们没有阻塞,那么您所看到的是因为在某些东西消耗该交换之前无法完成direct:out。因为那个电话是在sendBody()它无法完成之后发出的——正如你所看到的。您有三个选择(也许更多):asyncSendBody()按照您的说明使用。将 Exchange从哪个队列更改direct:out为seda:out允许发送完成并继续接收。删除"direct:out"端点并更改为sendBody(Endpoint, Object)将sendBody(Endpoint, ExchangePattern, Object)最终结果主体返回给调用者。选项 3 似乎是您想要做的,而且更简单。
随时随地看视频慕课网APP

相关分类

Java
我要回答