基于大小的聚合列表

Aggregate list based on size

我有一个列表,假设尺寸为 10,我想使用最大尺寸 6 进行聚合。 在这种情况下,它应该像这样工作:前 6 条消息被聚合成一条消息,然后立即(没有任何超时)接下来的 4 条消息被聚合成第二条消息。 如何在 spring 集成中实现此目的?我尝试使用 releaseStrategy 但我只能在其中定义最大大小,然后剩下的消息(在我的例子中是 4 条消息)在聚合器中等待更多消息(因此满足最大大小条件)。我不想等待聚合器超时,因为我知道我的列表大小为 10,因此在第 4 条消息之后无需等待,它应该立即创建第二条聚合消息。

使用自定义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;
    }
}