发送到 dql 时 RabbitMQ 抛出异常(最大值 frame_size)

RabbitMQ throw exception when send to dql (max frame_size)

当我收到来自 queue 的消息时,如果抛出异常,我想再次收到消息。 所以,我用 dql queue:

创建了我的消费者
spring:
  cloud:
    stream:
      bindings:
        to-send-output:
          destination: to-send-event
          producer:
            required-groups:
              - to-send-event-group
        to-send-input:
          destination: to-send-event
          group: to-send-event-group
          consumer:
            max-attempts: 1
            requeueRejected: true
      rabbit:
        bindings:
          #forever retry
          to-send-input:
            consumer:
              autoBindDlq: true
              dlqTtl: 5000
              dlqDeadLetterExchange:
              maxConcurrency: 300
              frameMaxHeadroom: 25000 #added this as in documentation

我按照 documentation 中的说明添加了 属性 frameMaxHeadroom: 25000,但它仍然不起作用。

我的springCloudVersion="Hoxton.RELEASE".

我的依赖:

dependencies {
...
    implementation "org.springframework.cloud:spring-cloud-starter-stream-rabbit"
...
}

github 的存储库中,我在 属性 文件中看到 frameMaxHeadroom 属性。

UPD:我看到 code 将堆栈跟踪减少了我设置的值(来自变量 frameMaxHeadroom)。我预计我不会减少堆栈跟踪,但会增加 headers 消费者的价值,如文档中所写。为什么它在我等待时不起作用?

frameMax是amqp客户端和服务端协商的;所有 header 必须适合一帧。您可以通过代理配置来增加它。

堆栈跟踪可能很大,很容易单独超过 frameMax;为了给其他 header 留出空间,框架为其他 header 留出至少 20,000 个字节(默认情况下),必要时通过截断堆栈跟踪 header。

如果你超过了你的 frameMax,你必须有其他大的 headers - 你需要增加净空以允许那些 headers,所以堆栈跟踪是进一步截断。