【问题标题】:"Fire then Return" route in Apache CamelApache Camel 中的“先开火然后返回”路线
【发布时间】:2020-01-31 18:24:37
【问题描述】:

我们使用 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”),并且因为处理器使用相同的上下文,它们在飞行中的消息被清除之前不会提交(仅供参考我已尝试强制在处理器中创建新事务,但没有成功)。

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

【问题讨论】:

    标签: java apache-camel


    【解决方案1】:

    如果您想调用处理器然后立即继续,那么您可以使用 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.

    【讨论】:

      猜你喜欢
      • 2015-11-20
      • 2014-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-04
      • 1970-01-01
      相关资源
      最近更新 更多