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