我用RabbitMQ (3.8.3 Erlang 22.3.1)
来表示Laravel (6.18.*)
,为此我使用https://github.com/vyuldashev/laravel-queue-rabbitmq。
对于正常的队列和消费者,一切都很好。为了区分消息的优先级,我定义了多个队列,在队列名称中使用0-3作为后缀。我通过手动计算作业总数将作业路由到不同的队列。
使用这种方法,对于不同的任务,我需要创建更多的名称具有优先级的队列,创建队列名称中包含0-3的队列似乎不可伸缩。
现在我尝试为每条消息设置优先级。为此,我尝试使用AMQPMessage
中的priority
属性:
$msg = new AMQPMessage("Hello World!", array(
'delivery_mode' => 2,
'priority' => 1,
'timestamp' => time(),
'expiration' => strval(1000 * (strtotime('+1 day midnight') - time() - 1))
));
我尝试了不同优先级的多条消息,但优先级似乎根本不起作用。
- 我在队列上设置了
x-max-priority
- 我将AMQPMessage的
priority
设置为1,并从一个终端发送100 K消息 - 同时,我使用
priority
2调度了另一组10条消息
但是使用者似乎没有使用优先级为2的消息。
你知道我犯了什么错误吗?请让我知道,如果有任何设置优先级的每一个消息,使消费者选择他们第一。
2条答案
按热度按时间hi3rlvi21#
尝试使用set,如下所示:
不要忘记使用“x-max-priority”声明队列
n1bvdmb62#
当为队列声明x-max-priority时,它会引发异常。
如果我遗漏了什么请告诉我