当前位置: 首页 > 知识库问答 >
问题:

如何使用骆驼-activemq-starter 的事务处理标志回滚消息

袁增
2023-03-14

我正在使用带有yaml自动配置的cameactivemq启动器。当我对消费者使用“?transactiond=true”标志时,消息将转到DLQ。我所寻找的行为是,如果骆驼路由中出现异常,则不从队列中删除消息。这在camel-sjms和camel-jms中使用“transaction=true”标志,效果如预期。提前感谢您的帮助!下面是yaml配置。

camel:
  component:
    reactive-streams:
      thread-pool-max-size: 5
    activemq:
      broker-url: "tcp://localhost:61616"
      connection-factory: ActiveMQConnectionFactory
      transaction-manager: JmsTransactionManager

以下是路线在一般情况下的样子:

    fromF("activemq:queue:queue?transacted=true")
                    .routeId("stopThisRoute")
                    .process(exchange -> {
----- something ------
                    })
                    -------
                            throw new IllegalStateException();
========
                        })
                    .end();

共有1个答案

石正信
2023-03-14

添加ack模式解决了骆驼激活Q-starter的这个问题。可能不是“问题”,只是不同的行为。

camel:
  component:
    activemq:
      broker-url: "tcp://localhost:61616"
      connection-factory: CachingConnectionFactory
      transacted: true
      transaction-manager: JmsTransactionManager
      acknowledgement-mode-name: CLIENT_ACKNOWLEDGE
 类似资料:
  • 我有一个队列系统,骆驼只是其中的一小部分。在此队列系统中,对于某些队列,代理在队列已满时返回 FAIL。为了解决这个问题,我查看我得到的 JMS 异常,从消息中我可以看到原因是否是队列已满。 我想在Camel中实现的是,对于满队列的特定情况,我希望重试传递,而对于任何其他JMS异常(或任何其他异常),我希望将其发送到DLQ。 我假设我必须使用onException(JMSException.cla

  • 我正在尝试从目录中选取一个文件,拆分一个文件,并将每一个拆分行添加到ActiveMQ中。我在这个过程中遇到了异常处理的问题。假设目录中的文件是一个二进制文件(可执行文件),那么splitter会显示org.apache.camel.runtimeCamelException和java.nio.charset.MalFormedInputException异常。如果出现这种情况,那么我需要捕获这些异

  • 在camel spring ws中,有没有办法将自定义主体(例如自定义bean)和http状态返回为500? 我试过了 然后在processor公共类ExceptionProcessor实现processor{ } 但是即使身体是我想要的,超文本传输协议状态总是200。 你能帮我吗? 更多信息:我正在使用camel 2.20.2版

  • 有一条骆驼路线,它被处理,异常由处理。代码如下所示: 它是有效的,并且在错误被处理后,事务有一个提交:,但是然后消息再次被放入输入队列中,事务从头开始(无尽循环)。 我们正在使用IBM MQ,我认为这种回滚是由MQ执行的,而不是从camel路线执行的。所以问题是:我能告诉MQ我处理了异常,并且它不应该再次回滚吗?

  • 我有一个场景,我想“拉”RabbitMQ队列/主题的消息,并一次处理一个。特别是当消费者启动时,队列中已经有消息。我尝试了以下方法,但没有成功(这意味着,这些选项中的每一个都会读取队列,直到队列为空,或者直到另一个线程关闭上下文)。 1.第一次处理后立即停止路由 与1类似,但使用闩锁而不是while loop和sleep。 使用轮询消费者 使用ConsumerTemplate()-类似于上面的代码