【问题标题】:How to pass message headers through pseudo transaction manager?如何通过伪事务管理器传递消息头?
【发布时间】:2016-11-18 08:31:05
【问题描述】:

我正在轮询服务激活器的文件,使用 PseudoTransactionManager 将它们移动到已处理/失败的目录中。 如果/当移动失败时,我想记录这个,包括文件名。

由于在流中传递的信息是 Message 对象,我尝试将文件名丰富到它的标题上,但是当我们为每个步骤复制它时,除非我可以移动标题丰富器,否则这将不起作用在入站通道适配器和事务管理器之间。

我现在的主要流程是这样的:

  • inbound-channel-adapter -> a) header-enricher -> service-activator

因为我希望将文件移动到已处理或失败的目录中,所以还有第二个流程:

  • inbound-channel-adapter -> b) 伪事务管理器 -> logging-channel-adapter(以防移动已处理文件出现问题)。

我认为这是因为事务管理器定义嵌套在 xml 中的通道适配器定义中。

如何通过此处的示例设置将此信息传递给日志通道适配器?

【问题讨论】:

    标签: spring-integration


    【解决方案1】:

    事务的东西只能访问原始消息。您可以将error-channel 添加到轮询器;默认的错误通道 (errorChannel) 是一个发布/订阅通道,并且订阅了一个日志通道适配器。

    发生异常时,将ErrorMessage 发送到错误通道(如果已配置);有效载荷是一个MessagingException,具有causefailedMessage 属性。 failedMessage 是发生故障时的消息。

    默认错误流只会记录消息,因此您的“事务”将“提交”。

    相反,您需要自定义错误流;记录你想要的,然后重新抛出原因,你的“交易”将“回滚”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-21
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      • 2021-11-26
      相关资源
      最近更新 更多