Сводный список по размеру
У меня есть список, скажем, размер 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;
}
}