如何通过伪事务管理器传递邮件头?

时间:2016-07-15 08:00:24

标签: spring-integration

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

由于围绕流传递的信息是Message对象,我尝试将文件名丰富到其标题中,但是当我们为每个步骤创建它的副本时,除非我可以移动标题,否则这将无法工作 - 入站通道适配器和事务管理器之间的连接。

简化形式我现在的主流是:

  • 入站通道适配器 - > a)标题增强 - >服务活化剂

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

  • 入站通道适配器 - > b)伪交易管理器 - > logging-channel-adapter(如果移动已处理文件时出现问题)。

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

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

1 个答案:

答案 0 :(得分:0)

交易内容只能访问原始邮件。您可以向轮询器添加error-channel;默认错误通道(errorChannel)是一个发布/订阅通道,并且有一个订阅它的日志通道适配器。

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

默认错误流只会记录消息,以便您的"事务"将"承诺"。

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