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



我们使用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字符串!

相关内容

  • 没有找到相关文章

最新更新