温馨提示:本文翻译自stackoverflow.com,查看原文请点击:java - "Fire then Return" route in Apache Camel
apache-camel java

java - Apache Camel中的“先火后归”路线

发布于 2020-03-29 21:39:31

我们使用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 来触发处理器并立即继续运行(即从中删除触发消息)飞行)?

查看更多

提问者
BombTodley
被浏览
17
Radu Podea 2020-01-31 18:24

如果要呼叫处理器然后立即继续,则可以使用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将继续路由,而无需等待direct:callProcessor的响应