symfony messenger:重试延迟无法使用redis传输

vom3gejh  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(398)

我有一个symfony4应用程序,它使用symfonymessenger组件(版本4.3.2)来发送消息。对于异步消息处理,配置了一些redis传输,它们工作正常。但后来我决定,当消息处理失败时,其中一个应该重试几次。我配置了重试策略,传输实际上在失败时开始重试,但它似乎忽略了延迟配置(密钥) delay , multiplier , max_delay )所有的重试尝试总是毫不延迟地进行,都是在一秒钟或类似的短时间内进行的,这在这个用例中是不可取的。
我的messenger配置( config/packages/messenger.yaml )看起来像这样

framework:
  messenger:
    default_bus: messenger.bus.default

    transports:
      transport_without_retry:
        dsn: '%env(REDIS_DSN)%/without_retry'
        retry_strategy:
          max_retries: 0
      transport_with_retry:
        dsn: '%env(REDIS_DSN)%/with_retry'
        retry_strategy:
          max_retries: 5
          delay: 10000 # 10 seconds
          multiplier: 3
          max_delay: 3600000
    routing:
      'App\Message\RetryWorthMessage': transport_with_retry

我试着用条令取代redis(作为重试传输的实现),瞧——延迟开始按预期工作。因此,我怀疑redis传输实现不支持延迟重试。但我仔细阅读了文档,搜索了github的相关问题,仍然没有找到明确的答案。
所以我的问题是:redis传输是否支持延迟重试?如果有,我该怎么做?

vnjpjtjt

vnjpjtjt1#

事实证明,redis传输支持延迟重试,但仅在messenger版本4.4之后。

相关问题