乱数を生成して消費者に渡すrabbitmqサーバーにプロデューサーがあるとします。Consumer は Producer からすべての乱数を受け取ります。コンシューマー プロセスを強制終了すると、プロデューサーはこの状況で何をしますか? 番号を継続的に生成するかどうか、および消費者(クライアント)が起動するたびに、プロデューサーまたはその他のものによって生成されたすべての番号を再度送信し始めるかどうか...
3 に答える
機能を完全に活用するには、rabbitmq ブローカーが取引所でどのように機能するかを理解する必要があります。これで問題が解決すると思います。
単一のキューに送信する代わりに、交換を作成します。プロデューサーは取引所に送信します。この時点でキューがないこの状態では、メッセージは破棄されます。次に、コンシューマがメッセージを受信できるようにキューを作成する必要があります。コンシューマーはキューを作成し、それを交換にバインドします。その時点で、キューはメッセージを受け取り、それらをコンシューマーに配信します。
あなたのケースでは、キーのバインドとルーティングについて心配する必要がないように、おそらくファンアウト交換を使用します。ただし、キューを自動削除するように設定する必要もあります。これにより、コンシューマーがダウンしたときにキューが削除されることが保証されます。したがって、この影響を受けないプロデューサーは、キューが再接続されるまで破棄されるメッセージを交換に送信し続けます。
今のところ、トピック交換があると仮定します。キューがあり、プロデューサーの同じ交換およびルーティング キー (またはドット付きプレフィックス) にバインドされている場合、そこにコンシューマーがあるかどうかに関係なく、キューはメッセージを構築します...ほとんどの場合。
RabbitMQ のメッセージング モデルの核となる考え方は、プロデューサーがメッセージをキューに直接送信しないということです。実際、プロデューサーは、メッセージがどのキューに配信されるかをまったく知らないことがよくあります。-- http://www.rabbitmq.com/tutorials/tutorial-three-python.html
キューが存在しない場合、メッセージは破棄されます。キューが存在する (つまり、耐久性がある) 場合は、メッセージに TTL または有効期限が設定されるように、キューおよび/またはメッセージに対して行うことができる構成があります: ( http://www.rabbitmq.com/ ttl.htmlおよびhttp://www.rabbitmq.com/dlx.html )。また、キューの耐久性と自動削除を調べて理解することもできます。AMQP のクイック リファレンスも参照することを強くお勧めします。擬似コードをライブラリまたはクライアントに変換する必要があります。
基本的には、交換の種類と、キューとメッセージの構成にすべてが集約されます。
ウサギmqのqはキューを表します。つまり、キューに配置されたすべてのメッセージ(この場合はプロデューサーの乱数)は、誰かがメッセージを取得するまでキューに残ります。