私はosxでPHPを使用してウサギを使用しています。
簡単な例。50K の永続的なメッセージを持つ 1 つの永続的なキューがあります。コンシューマ スクリプトを実行します。そのスクリプトの例があります:
...
while ($this->run) {
if ($message = $channel->basic_get("testq.{$this->id}")) {
$channel->basic_ack($message->delivery_info['delivery_tag']);
echo "{$message->delivery_info['routing_key']} (".$message->get('priority')."): {$message->body}\n";
$sleep = 15000; // usecs
} else {
usleep($sleep);
}
...
}
...
コンシューマー スクリプトを実行した後、うさぎの webadmin で、そのキューからのメッセージ数が減少していることがわかります。
すべて問題ないようです。
CTRL+C を使用して PHP コンシューマー スクリプトを強制終了し、たとえば 10K のメッセージが消費されるまでスクリプトを停止すると、40K のメッセージがキューに残っていることがわかります。
大丈夫です。
しかし、消費者スクリプトの実行中に (クラッシュをシミュレートしたい)、kill -9 または CRLT+C で rabbitmq を強制終了すると、そのキューの再起動メッセージ数が 50K に復元されます。
なぜだか分からない?どこに問題があるのでしょうか?