基于大小的聚合列表
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;
}
}
我有一个列表,假设尺寸为 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;
}
}