我想在聚合器上设置关联策略,以便它使用传入文件中的日期(作为消息)名称来关联文件,以便所有具有今天日期的文件属于同一组。现在,因为我可能有多天的数据,所以我可能会聚合2天的文件。我希望将发布策略基于包含文件名中日期的完成文件(消息),因此基本上每天都会有一堆文件和文件完成。提取完成文件应该从聚合器中释放当天的文件,但仍保留其他日期文件,直到摄取该日的完成文件为止。
所以在这种情况下,相关性显然很简单 - 但我不确定的是如何根据相关键释放来自该组的所有特定消息。文档讨论了关于messagereaper的内容,但这些内容涉及到消息库的内容,我希望在内存中完成所有这些操作。
让我详细说明一下
我将这些文件放在一个目录上,该目录由文件入站通道适配器
进行轮询文件1-2014.04.27.dat
文件2-2014.04.27.dat
文件3-2014.04.27.dat
done-2014.04.27.dat
文件1-2014.04.28.dat
文件2-2014.04.28.dat
done-2014.04.28.dat
正在轮询这些文件时,我在流中有一个聚合器,其中聚合了所有传入的文件。为了关联,我以为我可以提取日期并将其放在correlation_id标题中,以便前3个文件被认为属于一个组,然后第二个2个文件属于第二个组..现在,一旦我使用了done-2014.04。那个27.dat文件我想释放前三个文件,在流程中进一步处理但是坚持
文件1-2014.04.28.dat
文件2-2014.04.28.dat
直到收到
完成-2014.04.28.dat
然后发布这两个文件。
任何帮助将不胜感激。 感谢
答案 0 :(得分:0)
当你说“关联很简单”时,我不确定你是什么意思,但接着说你只想释放该组的一部分。如果他们有不同的日期,那么他们将在不同的组中,因此不需要释放组的一部分,只需在午夜之后(或第二天的任何时间)运行收割机来释放整个组。完全不清楚为什么你需要一个“完成”的消息。
默认情况下,聚合器使用内存中的消息存储(SimpleMessageStore
)。
编辑:
只需将done
文件放在同一个组中,让您的发布策略检测done
文件的存在。您可以使用表达式,但如果该组可能很大,则实现ReleaseStrategy
并迭代MessageGroup.getMessages()
以查找done
文件会更有效。
下一步取决于聚合器的下游。如果使用拆分器将它们拆分回单独的文件,则只需添加过滤器即可删除done
文件。如果您直接处理文件集合,请忽略已完成的文件,或添加转换器以将其从集合中删除。
关于收割者;假设文件实时到达,我只是建议,如果你说,如果你每天运行一次收割机(比如01:00),组时间超过30分钟,那么收割机就会发布昨天的文件(没有需要done
文件。
编辑:
请参阅下面您对“回答”的评论 - 您在filesLogger
上有2位订阅者。