基于大小

时间:2015-06-26 16:03:34

标签: spring-integration aggregator

我有一个让我们说大小为10的列表,我希望使用最大大小为6进行聚合。 在这种情况下,它应该像这样工作:前六个消息聚合成一个消息,然后立即(没有任何超时)接下来的4个消息聚合成第二个消息。 如何在弹簧集成中实现这一目标?我尝试使用releaseStrategy,但我只能在其中定义最大大小,然后留下的消息(在我的情况下为4条消息)在聚合器中等待更多消息(因此满足最大大小条件)。我不想等待聚合器超时,因为我知道我的列表大小是10,所以在第4条消息之后没有什么可以等待的,它应该立即创建第二条聚合消息。

1 个答案:

答案 0 :(得分:2)

使用自定义ReleaseStrategy;类似......

public class MyReleaseStrategy implements ReleaseStrategy {

    private final Map<Object, AtomicInteger>() map = new HashMap<>();

    public boolean canRelease(MessageGroup group) {
        AtomicInteger count = map.get(group.getGroupId());
        if (count == null) {
            count = new AtomicInteger();
            map.put(int);
        }
        int n = count.incrementAndGet();
        boolean canRelease = n == 6 || n == 10;
        if (n == 10) {
            map.remove(group.getGroupId());
        }
        return canRelease;
    }
}