You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Cloud Stream 2021.0.4 RabbitMQ分区功能失效问题求助

问题:Cloud Stream 2021.0.4 RabbitMQ分区抛出"Partition key cannot be null"异常

问题详情

  • 升级至Cloud Stream 2021.0.4版本后,启用RabbitMQ分区功能时消息路由失败,Binder持续抛出Partition key cannot be null异常;回滚至2021.0.3版本则功能正常,此前该功能在应用中运行稳定。
  • 已尝试多种分区键表达式,均无法解决:
    • spring.cloud.stream.bindings.output.producer.partition-key-expression: headers['amqp_correlationId']
    • headers['correlation_id']
    • headers.correlation_id

代码片段分析

相关的分区键提取方法如下,可见当通过键提取器和配置的表达式都无法获取到非空值时,会触发断言抛出异常:

private Object extractKey(Message<?> message) {
        Object key = invokeKeyExtractor(message);
        if (key == null && this.producerProperties.getPartitionKeyExpression() != null) {
            key = this.producerProperties.getPartitionKeyExpression()
                    .getValue(this.evaluationContext, message);
        }
        Assert.notNull(key, "Partition key cannot be null");

        return key;
    }

可能原因及处理建议

  1. 版本逻辑变更:2021.0.4版本的RabbitMQ Binder可能对消息头的处理逻辑做了调整,导致原本能被正确解析的amqp_correlationId等头信息无法通过SpEL表达式获取。
  2. 表达式适配调整:
    • 检查发送的消息是否确实携带目标头信息,可通过日志打印消息头内容确认;
    • 尝试使用更明确的表达式语法,比如message.headers['amqp_correlationId'],或部分AMQP客户端标准的headers['x-correlation-id']。
  3. 临时修复与长期方案:
    • 紧急情况下可回滚至2021.0.3版本恢复业务;
    • 向Spring Cloud Stream官方提交问题反馈,提供复现步骤、配置及环境信息,推动问题在后续版本中修复。

内容的提问来源于stack exchange,提问作者Siva Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 21:45:35