0

我有一个包装在 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 处理程序的错误

我究竟做错了什么?

4

0 回答 0