【问题标题】:Aggregator behavior on server restart - spring integration服务器重启时的聚合器行为 - 春季集成
【发布时间】:2016-04-04 18:16:43
【问题描述】:

前提 -

在 spring 集成中,如果我有一个聚合器,其中包含一个不完整的消息组。在满足组发布策略之前,服务器会重新启动。

  • 当前行为-> 发布到聚合器的所有消息都进入同一个消息组,而不是新消息组,因为它没有标记为完成,消息不断流入。
  • 预期-> 如果服务器重新启动,聚合器会从消息存储中挑选剩余的消息,将已持久化的消息标记为完成,然后提供新的消息,

我的预期不正确吗?有人可以指导吗?

【问题讨论】:

    标签: spring spring-integration aggregator


    【解决方案1】:

    我认为我们可以使用MessageGroupStoreReaper 满足您的要求,您将在服务器启动时运行它,例如通过捕捉ContextRefreshedEvent:

    MessageGroupStore 维护这些回调的列表,它根据需要将其应用于时间戳早于作为参数提供的时间的所有消息(请参阅上面的 registerMessageGroupExpiryCallback(..) 和 expireMessageGroups(..) 方法)。

    可以使用超时值调用 expireMessageGroups 方法。任何早于当前时间减去此值的消息都将过期,并应用回调。因此,商店的用户定义了消息组“过期”的含义。

    http://docs.spring.io/spring-integration/reference/html/messaging-routing-chapter.html#reaper

    【讨论】:

    • 感谢 Artem,我有这样一个收割机,它每天通过 cron 运行 2000 小时。有了你所说的,如果错误是如果服务器在指定时间启动,请纠正我,无论如何它都会清理前一天持续存在的所有消息?是吗?
    • 对,这是我的想法。不确定你现有的reaper,但这个新的应该只在应用程序启动时被调用一次。 timeout 可以只是 0 来清理 MessageStore 中的所有内容。既然是新的开始,那么很明显store中所有现有的消息都已经过时了,所以必须要清理掉。
    • 太棒了!所以,是时候接受答案以解决已解决的问题了。
    猜你喜欢
    • 1970-01-01
    • 2018-02-28
    • 2018-10-10
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 2016-12-18
    • 2018-06-15
    相关资源
    最近更新 更多