我使用resequencer来确保消息的正确顺序。当带有多个消息的某个进程结束时,我想再次启动具有相同相关ID的同一进程。它不起作用,因为用于特定相关性ID的消息组尚未完成,并且对于重排序器仍然存在,因此没有消息要释放(从头开始重播所有消息,因此没有收到序列号大于第一个进程的最后一个的消息) )。对于aggregator,可以设置expire-groups-upon-completion
属性,但是resequencer似乎没有这种功能。是否有可能获得描述的功能?
最佳答案
问题是,与聚合器不同,从重新排序器的角度来看,没有“完成”的概念-它无法知道组是否“完整”。
这就是为什么它不能作为重排序器本身的选项的原因。
您可以提供一个外部MessageGroupStore
bean-默认情况下,重新排序器会在内部创建它自己的SimpleMessageStore
,但是您可以提供自己的bean的引用。
然后,当您知道组“完整”时,可以使用相关ID调用removeMessageGroup()
,这将重置重新排序器。