我们正在使用Spring Integration Aggregator来聚合给定订单的订单项列表。现在我们在db中存储组消息信息。但我们注意到它在表UUID
表中使用INT_MESSAGE_GROUP
种值作为group_key。是否可以对此进行自定义以使用订单ID(在我们的系统中始终是唯一的),以便我们可以通过按订单ID对数据库运行查询来解决生产环境中的聚合问题。
我注意到内部它使用Correlation密钥作为组密钥但不确定为什么它没有使用我们的Correlation密钥(这是订单ID),因为我们在聚合器配置中配置了自定义关联策略。
我们正在使用spring integration 4.1.2
答案 0 :(得分:1)
因为我们在聚合器配置中配置了自定义关联策略。
AggregatingMessageHandler
有一个逻辑:
Object correlationKey = this.correlationStrategy.getCorrelationKey(message);
...
UUID groupIdUuid = UUIDConverter.getUUID(correlationKey);
因此,如果您的correlationStrategy
是正确的,则correlationKey
为order id
。
虽然是,但它仍然是数据库中的UUID
。
这是因为UUID
正好是CHAR(36)
并且在不同的RDBMS供应商之间完全兼容。
我们对此事有一个开放的JIRA,但我完全不相信用不同长度的自定义字符串键来破坏DB是合理的。
考虑根据您的UUID
密钥查找(或编写)某些数据库函数以构建类似的order id
,以便进行疑难解答查询。
或者......只是为您的客户提供一些Groovy脚本,以便使用Java中的UUID
获取java.util.UUID.nameUUIDFromBytes('myOrderId'.bytes).toString()
字符串!