【问题标题】:Spring Integration - Aggregating Priority ChannelSpring Integration - 聚合优先通道
【发布时间】:2023-11-23 17:17:02
【问题描述】:

我在 Spring 集成中使用了 Aggregator,还看到了 PriorityChannel。是否有可能以某种方式使用其中两个来实现以下要求:

  1. 从 RabbitMQ 接收消息并存储在具有聚合器的 spring 组件中
  2. Aggregator 正在进行聚合,但同时它会根据一些复杂的排序算法优先发布消息。
  3. 随着时间的推移,队列中的消息优先级可能会发生变化,我们需要能够在某个时间点重新安排优先级。

【问题讨论】:

    标签: spring-integration spring-amqp


    【解决方案1】:

    PriorityChannel 对此无济于事,但您可以在自定义 ReleaseStrategy 中做任何您想做的事情...

    @FunctionalInterface
    public interface ReleaseStrategy {
    
        boolean canRelease(MessageGroup group);
    
    }
    

    【讨论】:

    • 这个方法是如何被调用的?是否有一些调度程序或?因为如果它正在调用所有消息,我想我会浪费很多资源 - 在特定时间我将只有 1 条消息需要释放,然后是下一条(可以是我目前的 N 条消息中的任何一条)在聚合器队列中)。你还有什么建议吗?谢谢。
    • 每条消息到达时调用;您还可以设置groupTimeout,如果该组的消息在那段时间内没有到达,它将被调用。您的要求并不完全清楚。