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

Spring Cloud下@StreamListener关自动提交仍无Acknowledgement头问题

问题解决方案

1. 确认绑定名称匹配

你当前application.yml中配置手动提交的绑定名为ens-notify-request,需要和INotifyRequestEventChannel.TOPIC_NAME_NOTIFY_REQUEST_EVENTS对应的通道绑定名完全一致,否则手动提交的配置不会作用到你监听的通道上,自然不会注入Acknowledgment对象。

2. 修正配置适配版本

根据你使用的Spring Cloud Stream版本调整配置:

  • 2.x版本:保留你当前的配置即可,确认无全局配置覆盖绑定级别的手动提交规则
  • 3.x及以上版本:autoCommitOffset属性已废弃,仅保留acknowledge-mode: manual配置即可,配置参考如下:
spring:
  cloud:
    stream:
      kafka:
        bindings:
          ens-notify-request: # 此处需和你的实际监听绑定名完全一致
            consumer:
              acknowledge-mode: manual

3. 调整监听代码获取方式

优先使用方法参数直接注入Acknowledgment,比从消息头中获取兼容性更高,调整后的代码示例:

@StreamListener(target = INotifyRequestEventChannel.TOPIC_NAME_NOTIFY_REQUEST_EVENTS)
public void handleEvents(Message<?> message, Acknowledgment acknowledgment) {
    long startTime = System.currentTimeMillis();
    logger.info("Notify Request event received headers=[{}], payload=[{}]", message.getHeaders(), message.getPayload());
    try {
        logger.info("Before handleNotifyRequest acknowledgment = {} ",acknowledgment);
        // 业务处理完成后调用ack方法提交偏移量
        acknowledgment.acknowledge();
    } catch (Exception e) {
        // 异常处理逻辑,可选择不提交或者重试
    }
}

4. 版本兼容校验

确认你项目中引入的spring-cloud-stream-binder-kafka依赖版本和Spring Boot核心版本匹配,版本不兼容会导致消息头注入异常。

内容的提问来源于stack exchange,提问作者Anant Bhatnagar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:27:00