Сводный список по размеру

У меня есть список, скажем, размер 10, я хочу агрегировать, используя максимальный размер 6. В этом случае это должно работать так: сначала шесть сообщений объединяются в одно сообщение, а затем сразу (без какого-либо таймаута) следующие 4 сообщения объединено во второе сообщение. Как я могу добиться этого в весенней интеграции? Я попытался использовать releaseStrategy, но я могу только определить в нем максимальный размер, а затем оставленные сообщения (4 сообщения в моем случае) ожидают в агрегаторе больше сообщений (таким образом, условие максимального размера выполняется). Я не хочу ждать истечения времени ожидания агрегатора, потому что я знаю, что размер моего списка равен 10, поэтому после 4-го сообщения ждать нечего, оно должно сразу создать второе агрегированное сообщение.

1 ответ

Решение

Используйте кастом 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;
    }
}
Другие вопросы по тегам