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

标签 java apache-camel

我们使用 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/

相关文章:

Java多线程在不工作的输出文件锁定中混合文本

java - 图像过度缩放

http - Camel : outgoing connections limit for http component

java - 空指针伸展树(Splay Tree)

相当于 OpenLayers 的 Java

java - 在 Java 中创建子图像

java - Apache Camel 合并来自不同路径的两个文件

java - Apache Camel Web 控制台的 scalate servlet 在 WebLogic 中失败

php - 使用 Camel 从 ActiveMQ 发布 HTTP

java - 如何在不同 Camel 路线上的方法之间共享对象