Symfony Messenger:重试延迟不适用于 Redis 传输
Symfony Messenger: retry delay not working with Redis transport
我有一个使用 Symfony Messenger 组件(版本 4.3.2)发送消息的 Symfony 4 应用程序。
对于异步消息处理,配置了一些 Redis 传输并且它们工作正常。但后来我决定其中一个应该在消息处理失败时重试几次。我配置了一个 retry strategy 并且传输实际上开始重试失败,但它似乎忽略了延迟配置(键 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
我尝试用 Doctrine 替换 Redis(作为重试传输的实现),瞧——延迟开始按预期工作。因此我怀疑 Redis 传输实现不支持延迟重试。但是我仔细阅读了文档,搜索了相关的Github问题,仍然没有找到明确的答案。
所以我的问题是:Redis transport是否支持延迟重试?如果可以,我该如何让它发挥作用?
原来Redis传输支持延迟重试,但是only since Messenger version 4.4.
我有一个使用 Symfony Messenger 组件(版本 4.3.2)发送消息的 Symfony 4 应用程序。
对于异步消息处理,配置了一些 Redis 传输并且它们工作正常。但后来我决定其中一个应该在消息处理失败时重试几次。我配置了一个 retry strategy 并且传输实际上开始重试失败,但它似乎忽略了延迟配置(键 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
我尝试用 Doctrine 替换 Redis(作为重试传输的实现),瞧——延迟开始按预期工作。因此我怀疑 Redis 传输实现不支持延迟重试。但是我仔细阅读了文档,搜索了相关的Github问题,仍然没有找到明确的答案。
所以我的问题是:Redis transport是否支持延迟重试?如果可以,我该如何让它发挥作用?
原来Redis传输支持延迟重试,但是only since Messenger version 4.4.