如何在Spring Integration Aggregator中的JdbcMessageStore中使用自定义组键

时间:2016-07-22 16:35:16

标签: spring-integration

我们正在使用Spring Integration Aggregator来聚合给定订单的订单项列表。现在我们在db中存储组消息信息。但我们注意到它在表UUID表中使用INT_MESSAGE_GROUP种值作为group_key。是否可以对此进行自定义以使用订单ID(在我们的系统中始终是唯一的),以便我们可以通过按订单ID对数据库运行查询来解决生产环境中的聚合问题。

我注意到内部它使用Correlation密钥作为组密钥但不确定为什么它没有使用我们的Correlation密钥(这是订单ID),因为我们在聚合器配置中配置了自定义关联策略。

我们正在使用spring integration 4.1.2

1 个答案:

答案 0 :(得分:1)

  

因为我们在聚合器配置中配置了自定义关联策略。

AggregatingMessageHandler有一个逻辑:

Object correlationKey = this.correlationStrategy.getCorrelationKey(message);
...
UUID groupIdUuid = UUIDConverter.getUUID(correlationKey);

因此,如果您的correlationStrategy是正确的,则correlationKeyorder id

虽然是,但它仍然是数据库中的UUID

这是因为UUID正好是CHAR(36)并且在不同的RDBMS供应商之间完全兼容。

我们对此事有一个开放的JIRA,但我完全不相信用不同长度的自定义字符串键来破坏DB是合理的。

考虑根据您的UUID密钥查找(或编写)某些数据库函数以构建类似的order id,以便进行疑难解答查询。

或者......只是为您的客户提供一些Groovy脚本,以便使用Java中的UUID获取java.util.UUID.nameUUIDFromBytes('myOrderId'.bytes).toString()字符串!