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