我有一个包装在 docker 中的 symfony 项目,并配置了一个 Redis 队列。
配置:
信使.yaml
parameters:
env(CONSUMER_ID): '0'
framework:
messenger:
# Uncomment this (and the failed transport below) to send failed messages to this transport for later handling.
failure_transport: failed
transports:
# https://symfony.com/doc/current/messenger.html#transport-configuration
async_priority_high:
dsn: 'redis://%env(REDIS_QUEUE_NAME)%:6379/messages/symfony/consumer-%env(CONSUMER_ID)%&auth=%env(REDIS_PASSWORD)%'
options:
redeliver_timeout: 10000
group: high
retry_strategy:
max_retries: 3
# milliseconds delay
delay: 2000
# causes the delay to be higher before each retry
# e.g. 1 second delay, 2 seconds, 4 seconds
multiplier: 2
max_delay: 0
async_priority_low:
dsn: 'redis://%env(REDIS_QUEUE_NAME)%:6379/messages/symfony/consumer-%env(CONSUMER_ID)%&auth=%env(REDIS_PASSWORD)%'
options:
redeliver_timeout: 10000
group: low
# default configuration
retry_strategy:
max_retries: 3
# milliseconds delay
delay: 2000
# causes the delay to be higher before each retry
# e.g. 1 second delay, 2 seconds, 4 seconds
multiplier: 2
max_delay: 0
failed: 'doctrine://default?queue_name=failed'
routing:
'App\Message\MessageHighPriority': async_priority_high
'App\Message\MessageLowPriority': async_priority_low
处理程序:
<?php
namespace App\MessageHandler;
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
final class Handler implements MessageHandlerInterface
{
public function __construct(...)
{
...
}
public function __invoke(MessageHighPriority $message)
{
...
}
}
但是当我运行命令时
bin/console messenger:consume async_priority_high -vv
我看到无论我运行哪个接收器以及优先级如何,都会处理 MessagePriorityLow,也就是说,如果我在队列中有两条消息,那么当我运行命令时
bin/console messenger:consume async_priority_high async_priority_high -vv
首先处理那些首先进入队列的消息
另外,如果我在 Hanlker 中明确指定 from_transport => async_priority_low 为低优先级,并运行命令
bin/console messenger:consume async_priority_high async_priority_high -vv
我收到没有 async_priority_low 处理程序的错误
我究竟做错了什么?