RabbitMQ を使用して、オブジェクトの状態をリッスンしている可能性のある消費者に継続的にブロードキャストしたいと考えています。消費者がサブスクライブすると、利用可能な最後の状態を取得するように設定したい...これは可能ですか?
2 に答える
カスタムの最終値キャッシュ交換を使用します: 例: https://github.com/squaremo/rabbitmq-lvc-plugin
Last value caching exchange :
これは、RabbitMQ のプラグ可能な交換タイプ機能を使用したラスト バリュー キャッシュの非常に単純な実装です。
最後の値のキャッシュは、次のような問題を解決することを目的としています。メッセージングを使用して、値の変化に関する通知をクライアントに送信しているとします。現在、新しいクライアントが接続すると、値が変更されるまで値がわかりません。
最後の値交換は、直接交換のように機能します (バインディング キーがルーティング キーと等しいかどうかが比較されます)。ただし、各ルーティング キーで発行された最後の値も追跡し、キューがバインドされると、バインディング キーの最後の値を自動的にキューに入れます。
最近の履歴カスタム交換で可能です。最後の20個のメッセージをキューに入れると書かれているので、構成可能であれば、それを最後の1個のメッセージに変更できれば完了です。
それが機能しない場合、つまり番号が20に固定されている場合は、キューから最初の19個のメッセージを処理し、20番目からステータスを取得する必要があります。これは少し厄介な回避策ですが、ご存知のように、パラメーターは常に20であり、これで問題ありません。
最後に、これが適切でない場合は、ステータスが適度に頻繁にブロードキャストされると想定して、最初のステータスが受信されるまで待機するようにコンシューマーを設定します。最初のステータスを受け取ったら、残りのアプリケーションを開始します。ここでは、何か他のことをする前にステータスが必要であると想定しています。