2017-04-10 136 views
0

我想切換我的任務隊列以利用優先級支持,我可以設置創建任務的x-max-priority值,但是當我嘗試獲取任務時,它是拋出一個錯誤。RabbitMQ消費者在使用優先級時拋出錯誤

是否有一種特殊的方式來使用消費者獲取任務?

$channel->queue_declare('task_queue', false, true, false, false); 

PhpAmqpLib \異常\ AMQPProtocolChannelException「與消息 」 PRECONDITION_FAILED - 不等價ARG‘× - 最大優先級’的隊列 ‘task_queue’在虛擬主機‘的虛擬主機’:接收沒有,但電流值 在 /var/www/html/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Channel/AMQPChannel.php:188

回答

0

的 '100' 類型 'signedint'」你需要$channel->queue_declare以相同的參數在雙方。

所以,你必須設置在兩側的優先級屬性像

$channel->queue_declare('task_queue', false, true, false, false, false, $parameters); 

其中$parameters是一個數組聲明如下

$parameters = [ 
    'x-max-priority' => ['I', 100], 
]; 
+0

謝謝,我能與此聲明一下: $參數[ 'x-max-priority'] =數組('I',100); $ channel-> queue_declare('task_queue',false,true,false,false,false,$ parameters); – Kevin

+0

我試圖用優先級插入500k任務(在1-100之間隨機設置),並且我注意到200-300k任務後,它變得非常慢(240/s),RabbitMQ是否必須對這些任務進行排序/索引? – Kevin

+1

@Kevin我知道rabbitmq具有優先級隊列的開銷,但我的工作負載沒有一個用例同時具有如此大的未消耗的消息峯值。所以我不知道 – zerkms