我将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,并从一个终端发送100K消息 - 与此同时,我用
priority
2发送了另一组10条消息
但是使用者似乎并没有使用优先级为2的消息。
你知道我在犯什么错误吗?请告诉我是否有什么可以为每条消息设置优先级,以便消费者首先选择它们。
尝试使用set,比如:
$headers = new AMQPTable([
'x-cache-ttl' => 10 * 60000,
]);
$msg = new AMQPMessage($msg);
$msg->set('application_headers', $headers);
$msg->set('priority', 2);
别忘了用"x-max-priority"声明队列
$options = new AMQPTable([
'x-max-priority' => 3,
]);
$connection = new AMQPStreamConnection(RABBIT_HOST, RABBIT_PORT, RABBIT_LOGIN, RABBIT_PASS);
$channel = $connection->channel();
$channel->queue_declare('queue_name', false, false, false, false, false, $options);