为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕勒3428872 2023-06-04 17:49:56
我有一条简单的路线: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()它无法完成之后发出的——正如你所看到的。

您有三个选择(也许更多):

  1. asyncSendBody()按照您的说明使用。

  2. 将 Exchange从哪个队列更改direct:outseda:out允许发送完成并继续接收。

  3. 删除"direct:out"端点并更改为sendBody(Endpoint, Object)sendBody(Endpoint, ExchangePattern, Object)最终结果主体返回给调用者。

选项 3 似乎是您想要做的,而且更简单。


查看完整回答
反对 回复 2023-06-04
  • 1 回答
  • 0 关注
  • 90 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信