3 つ目の RabbitMQ チュートリアルについて質問があります。プロデューサーが交換にメッセージを送信するときにコンシューマーが実行されているという保証がないことを除いて、私は似たようなものを実装しようとしています。
したがって、メッセージをファンアウト交換に発行するプロデューサーがあります。
$channel->exchange_declare('my_exchange', 'fanout', false, false, false);
$channel->basic_publish('my_message', 'my_exchange');
パブリッシャーでキューを宣言し、それをエクスチェンジにバインドします。
list($queueName,, ) = $channel->queue_declare("", false, false, true, false);
$channel->queue_bind($queueName, 'my_exchange');
そして、これが私の問題の根源です。チュートリアルには次のように書かれています。
キューがまだエクスチェンジにバインドされていない場合、メッセージは失われますが、それは問題ありません。コンシューマーがまだリッスンしていない場合は、メッセージを安全に破棄できます。
これらのメッセージをどうにかして保存する方法はありますか? コンシューマーが起動すると、以前に送信されたメッセージにアクセスしますか? その方法を見つけた唯一の方法は、プロデューサーとパブリッシャーで同じキューを宣言することですが、交換と異なるコンシューマー用の個別のキューを持つという目的を無効にします。