gpt4 book ai didi

java - Apache Camel 中的 "Fire then Return"路线

转载 作者:行者123 更新时间:2023-11-30 05:18:15 25 4
gpt4 key购买 nike

我们使用 Apache Camel 来触发应用程序中的一些进程,例如:

from("quartz2://sometThing/someQueue?cron=0+0+4+?+*+MON-SUN").setBody(constant(""))
.routeId(this.getClass().getSimpleName())
.to("jms:some-trigger-queue");

然后,我们从触发队列中取出一堆处理器来运行每个作业,例如:

from("jms:some-trigger-queue")
.processRef("someProcessor");

其中一些处理器将依次将消息写入 JMS 队列。我试图解决的问题是,在整个过程完成之前,处理器不会将 JMS 消息提交给代理。我怀疑这是因为触发队列(“jms:some-trigger-queue”)上有一条正在运行的消息,并且因为处理器使用相同的上下文,所以在清除正在运行的消息之前它们不会提交(仅供引用)已尝试强制在处理器内创建新交易,但没有成功)。

所以我的问题是,如果我只有一个处理器(或者我不关心同时运行的处理器) - 我如何配置camel来触发处理器并立即继续(即删除触发消息)从飞行中)?

最佳答案

如果您想调用处理器,然后立即继续,则可以使用 Wire Tap EIP ( https://camel.apache.org/manual/latest/wireTap-eip.html )。

例如:

    from("jms:some-trigger-queue")
.wireTap("direct:callProcessor");

from("direct:callProcessor")
.processRef("someProcessor");

这样,direct:callProcessor路由将在单独的线程上执行,并且jms:some-trigger-queue将继续路由,而无需等待的响应>直接:callProcessor

关于java - Apache Camel 中的 "Fire then Return"路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60001897/

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