Spring集成复杂关联策略

时间:2014-08-01 20:11:44

标签: java spring-integration correlation

我正在尝试使用spring-integration来聚合来自N个来源的数据。在实现关联策略时,我的理解受到挑战,因为我没有在需要使用的所有数据源之间存在公共ID。例如:

数据源消息(MainID,SubIDTwo)

数据源B消息(MainID,SubIDOne,SubIDTwo)

数据源C消息(SubIDOne)

数据源D消息(SubIDTwo)

将所有数据源集中在一起,可以合并数据集。但是,在该示例中,数据源D没有直接映射到数据源C.只能使用数据源B实现此映射。无法预测所有消息的接收时间,因此在某些情况下数据源D' s消息可能在数据源B之前到达,而在其他数据源B可能在数据源D之前到达。接收所有消息的预期时间可能长达几个小时。我也不能依赖于收到的所有消息,因此任何仅依赖于单个数据源(如数据源B)的策略都不会解决所有潜在的情况。大多数样本都假设一个共同的id:

public Object getCorrelationKey(Message<?> interactionMessage) {

    MessageHeaders headers = interactionMessage.getHeaders();
    if(headers.containsKey("MAINID")) return headers.get("MAINID");
    return null;
}

参考指南对于Spring如何处理关联策略中的返回Object有点模糊。此Object可以包含每个ID的属性吗?Override equal方法如果任何ID匹配或者这是一个无效的方法,则返回true?

1 个答案:

答案 0 :(得分:0)

执行此操作的一种方法可能是使用自定义MessageGroupStore

消息D到达群组,说D:bar

消息C到达群组,说C:baz

消息A到达(真实)组foo - 消息存储将消息D移至组foo,删除组D:bar

消息B到达(真实)组foo - 消息存储将消息C移动到组foo,删除组C:baz

你还需要地图来处理在C,D之前到达的A,B - 所以你知道真实的群体已经存在。