Spring集成:在消息链中保留消息的上下文

时间:2019-07-03 14:04:13

标签: spring spring-integration

我正在使用spring-integration,并且有一条消息通过int:chain传递,其中包含多个元素:int:service-activatorint:transformers等。最后,一条消息发送到另一个应用程序的其余端点。还有一个errorHandler将任何Exception保存在文本文件中。

出于管理目的,我想保留有关链中发生的情况的一些信息(例如:“此数据库调用返回了此结果”,“在此转换过程中应用了此规则”,等等)。这将等效于日志文件,但绑定到Message。当然已经有了一个记录器,但是最后,我需要为这个特定的Message和数据创建文件(在调用Rest进行调用之后或发生错误时)。

我想知道Message是否存在某种“上下文”,可以在链的任何部分调用,以及可以在哪里存储东西。我没有在官方文档中找到任何东西,但是我不确定要寻找什么。

我一直在考虑将其全部放入消息本身,但是:

  • 这是一个不可变的对象,因此每次我想向其标头(或有效负载)添加某些内容时,都需要对其进行重建。
  • 如果出现异常,我将无法从错误处理程序中检索任何新数据,因为它会接收原始消息。
  • 我不能真正将其添加到有效负载对象中,因为某些本机转换器/服务激活器正在直接使用它(这也意味着重写很多代码...)

我也一直在考虑某个“线程绑定” bean的国王,它可以作为每个Message的上下文,但是我看到了太多的问题。

也许我对这些想法有些误解。无论如何,我只需要一种方法就可以通过Spring集成链的多个元素来保留数据,并且还能够在错误处理程序中访问它。

1 个答案:

答案 0 :(得分:0)

添加标题,例如地图或列表,并在每个阶段将其添加。

启用消息历史记录后,框架会执行类似的操作。