2015-06-26 2 views
2

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

ответ

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; 
    } 
} 
Смежные вопросы