【问题标题】:How to use custom group key in JdbcMessageStore in Spring Integration Aggregator如何在 Spring Integration Aggregator 的 JdbcMessageStore 中使用自定义组键
【发布时间】:2016-07-23 01:35:50
【问题描述】:

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

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

仅供参考,我们使用的是 spring 集成 4.1.2

【问题讨论】:

    标签: spring-integration


    【解决方案1】:

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

    AggregatingMessageHandler 有一个逻辑:

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

    因此,如果您的 correlationStrategy 正确,则您将 correlationKey 作为您的 order id

    虽然是,但它仍将作为UUID 在数据库中。

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

    我们有一个公开的JIRA 就此事,但我完全不认为用不同长度的自定义字符串键来炸 DB 是合理的。

    考虑根据您的order id 密钥查找(或编写)一些数据库函数来构建类似的UUID 用于那些故障排除查询。

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

    【讨论】:

    • 感谢 Artem 您的意见。我认为我们现在可以接受 JdbcMessageStore 提供的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 2014-09-09
    相关资源
    最近更新 更多