gpt4 book ai didi

java - 如何正确使用apache Camel中的直接组件?

转载 作者:行者123 更新时间:2023-12-02 01:22:17 26 4
gpt4 key购买 nike

我有一个简单的路线:

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上没有消费者.

我可以为消费者使用另一个线程,但我的目标是使用 Camel 路由作为具有输入和输出的函数。

另外,我可以使用producer.asyncSendBody(...)但这是正确的方法吗?这种方法允许我使用 consumer 使用消息,但我认为应该有另一种方式。

最佳答案

如果不知道步骤 1、2、N 正在做什么,就不可能明确地说出发生了什么,但假设它们没有阻塞,那么您所看到的是因为 direct:out 可以直到某些东西消耗掉该交换后才能完成。由于该调用是在 sendBody() 之后进行的,因此无法完成 - 正如您所看到的。

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

  1. 如您所述,使用 asyncSendBody()
  2. direct:out 更改为 seda:out,后者对 Exchange 进行排队,允许发送完成并继续接收。
  3. 删除 "direct:out" 端点并将 sendBody(Endpoint, Object) 更改为 sendBody(Endpoint, ExchangePattern, Object)它将最终结果正文返回给调用者。

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

关于java - 如何正确使用apache Camel中的直接组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57477322/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com