【问题标题】:Camel consume single message and stop, transacted骆驼消费单条消息并停止,交易
【发布时间】:2015-05-15 10:58:19
【问题描述】:

我正在尝试使用 Camel 以事务方式使用来自 JMS 队列的单个消息。特别是在这样的流程中:

  1. 等到消息发布到 JMS 队列上
  2. 尝试消费和处理单个消息
  3. 如果处理失败(发生异常),则回滚消费
  4. 如果处理通过,则确认并停止再消费消息
  5. 在应用程序生命周期的后期,另一个进程触发消费从 (1) 重新开始

起初我尝试使用轮询消费者、使用 ConsumerTemplate 来执行此操作,但我无法确定是否可以通过事务执行此操作 - 似乎事务在 ConsumerTemplate 内部,因此无论我做什么在 ConsumerTemplate 返回时,消息已被确认为已消费。

我可以使用 ConsumerTemplate 执行此操作吗?我可以使用 Camel 来做到这一点吗?如果可以,最好的方法是什么(欢迎提供简单示例)?

【问题讨论】:

    标签: java transactions apache-camel consumer


    【解决方案1】:

    我最终使用 pollEnrich dsl 来实现这一点。例如,我的路线构建器如下所示:

    from("direct:service-endpont").transacted("PROPOGATION_REQUIRED").setExchangePattern(ExchangePattern.InOut).pollEnrich("activemq:test-queue").bean(myHandler);
    

    我将直接端点用作服务,将“请求”消息发送到直接端点轮询 jms 队列以获取单个消息(如果需要则阻塞)。开始的事务扩展到 pollEnrich,因此,例如,如果 myHandler bean 失败,则在 pollEnrich 期间获取的消息不会被消耗并留在队列中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-24
      • 1970-01-01
      • 2014-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多