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

Spring集成JMS事务错误通道事务

盖和洽
2023-03-14

我目前在Spring集成中处理JMS事务时遇到困难。我正在创建的集成流程如下所示:

JMS队列A-

我希望在JMS队列B和JMS队列C上保证消息的传递。然而,为了使传递稍微困难一些,我希望将导致错误的消息存储在单独的JMQ队列上,并在队列a上确认消息

但是,如果我对此进行测试并在队列C上设置消息之前抛出错误(让我们假设队列B首先完成,队列C其次完成),事务将确认队列A并在队列B和错误队列上提交消息。

当发生错误时,我应该如何告诉spring integration不要提交队列B上的消息,而只确认A并提交错误队列?

为B和C启动新事务将不起作用,因为在B和C提交后,a上的确认可能会失败。

共有1个答案

方寒
2023-03-14

对我来说,看起来你会独立于B和C的结果确认A。所以,坦率地说:不如进行这些单独的事务,但在第二个事务开始之前确认A。在这种情况下,回滚B和C并发送到错误通道不会影响A。

 类似资料:
  • 场景可能是:我的期望可能是批量10个数据点,我想对{failed 5,pass 5}或其他什么给出响应。 我的逻辑是将批处理拆分为数据元素并进行验证 成功的验证将发送给aggreagtor, 失败的验证将抛出错误并通过错误通道拾取。 收件人列表路由器将错误通道作为输入通道,并连接2个过滤器,目的是过滤某些类型的错误直接发送响应(与用户输入无关的信息-服务器错误等),某些类型的客户端错误将转到聚合器

  • 我使用以下代码消费来自JMS ActiveMQ的消息: 我的要求是从这里消费并将其发布到Kafka出站适配器。使用以下配置: 以下是我想实现的目标: > 我注意到我的消息会立即出队,如果处理遇到一些异常,我无法重新处理它。我不希望这种情况发生。 我真的很难让它发挥作用。有人能帮帮我吗?

  • 在通过MQ处理消息时,我想有条件地回滚XA事务并将MQ消息放回原始队列。 失败将被记录到数据库中,并且可以使用基于消息类型和错误的自定义逻辑从数据库中重试。 如果我们无法将错误记录到数据库中,则应回滚整个XA事务并将消息放回队列中。 每条消息都经过多个步骤处理,代码可以处理消息的重新提交/复制。 我有一个解决方案,但它的结果是在丑陋的配置,我想知道是否有更好的方法来实现同样的结果?我在考虑使用一个

  • 我正在使用spring integration来设置消息流。我从一个目录中读取文件,并对它们做一些事情。我已经在入站通道适配器上设置了一个poller,其中包括事务管理器和同步工厂。同步工厂将after-commit和after-rollback推送到通道,这些通道将原始文件推送到成功或失败文件夹。这一切都很好。 现在的问题是,当处理一些文件时,它们可能会产生新的消息,我想通过同样的过程循环。我不

  • 问题内容: 我正在使用同时使用JMS和Hibernate的独立应用程序。 该文档建议,如果我想同时使用这两种资源进行事务处理,则必须使用JTA。 但是,现在使用带有@Transaction注释的DAO方法(和HibernateTransactionManager),这似乎已经可以工作。当我在JmsTemplate上调用send()时,消息不会立即发送,而是随着方法的返回,使用Hibernate会话

  • 当执行上面的代码时,将发生回滚,并且“Hibernate操作”将被回滚,但在TaskService.Complete中执行的操作不会被回滚。 我已经调试了Camunda代码,一切似乎都正常,我找到了一个SpringTransactionInterceptor,命令在中执行,此时事务处于活动状态。