3

ワーカーのコールバックから作業ステータスをログに記録し、残されたキューに多数のメッセージを含めたいと考えています。

これまでに見つけた唯一の解決策は、queue_declare結果配列の 2 番目のメンバーを取得することですが、これはワーカーの起動ごとに 1 回呼び出す必要があり、新しいメッセージごとに情報を更新する必要があります。

UPD : IMSoP の回答に基づくソリューション:

<?php
require_once __DIR__ . '/../vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();
$channel->queue_declare('test1');
echo "[*] Waiting for messages. To exit press CTRL+C\n";
$callback = function ($msg) use ($channel) {
    list (, $cn) = $channel->queue_declare('test1', true);
    echo ' [x] Received ', $msg->body, " $cn left";
    for ($i = 0; $i < $msg->body; ++$i) {
        sleep(1);
        echo '.';
    }
    echo "\n";
};
$channel->basic_qos(null, 1, null);
$channel->basic_consume('test1', '', false, true, false, false, $callback);
while (count($channel->callbacks)) {
    $channel->wait();
}

何らかの理由で、メッセージ数として常に 0 が返されます。

4

1 に答える 1