5

AMQP関数consume()は、コールバックを使用したブロッキング関数です。consume()関数のタイムアウトを設定できるので、特定の時間が経過してもブロックされなくなり、コードの実行が完了しますか?

4

1 に答える 1

6

はい、その方法は次のとおりです。

$amqp = new AMQPConnection($your_connection_params);
$amqp->setTimeout($seconds);

次に、キューでconsume()を呼び出すと、タイムアウト期間内にメッセージが到着しない場合、AMQPExceptionがconsume()からスローされ、「リソースは一時的に利用できません」というメッセージが表示されます。コンシューマー()から抜け出したり、タイムアウトになった場合は、キューオブジェクトでcancel()を呼び出して、コンシューマーを適切にリセットしてください。これを行うには、グローバルに一意のコンシューマータグを生成し、それを文書化されていない3番目のパラメーターとして渡す必要があります。

$tag = uniqid() . microtime(true);
$queue->consume($callback, $flags, $tag);
$queue->cancel($tag);

そうすれば、頭を回転させるような奇妙な問題を起こすことなく、後でもう一度consume()を呼び出すことができます。

于 2013-07-13T01:49:23.970 に答える