単一のウサギ ノードで実行されている grails アプリがあります。それは素晴らしいです。同じマシンの別のポートで同じアプリをもう一度起動したいと考えています。現在、両方のアプリが両方のアプリからのジョブに応答します。うさぎを自立させたい。各アプリが送信したメッセージにのみ応答するようにする最も簡単な方法は何ですか? 複数のウサギのキュー?
2 に答える
grails 構成で virtualhost エントリを指定できます。
rabbitmq.connectionfactory.virtualHost The name of the virtual host to connect to
RabbitMQ で 2 つの異なる vhost を定義すると、各 grails アプリは、使用する独自の構成済み領域を持ちます。1 つの vhost を介して送信されたメッセージは、その vhost でのみ利用可能になり、2 つの grails アプリを効果的に分離できます。キューのセットアップや各アプリのその他の内部部分を変更する必要はありません (接続の構成だけです)。
アクセス制御は vhost ごとに実行されることに注意してください。そのため、 rabbitmqの各 vhost へのアクセス権をユーザーに付与する必要があります。
@fiskfisk が言ったように、複数の vhosts はオプションであり、キュー、交換、バインディングの複雑なセットがある場合に特にうまく機能します。2 番目のアプリケーションに新しい vhost を使用することには、アクセス制御管理の重複やわずかなパフォーマンス オーバーヘッドなど、いくつかの欠点があります。
かなり単純なキュー/エクスチェンジ/バインディングのセットアップがある場合は、別の名前のキューで 2 番目のアプリを指すか、別のキューを使用するか、またはRabbitMQ 内でトピックベースのルーティングを行い、各アプリにアプリ固有のプレフィックス (または類似のもの) を使用してメッセージにフラグを付けます。
トピック ルーティングを使用してアプリを差別化する利点の 1 つは、メッセージの完全なストリームに簡単にアクセスして、アーカイブ ログや監査ログ、その他のメトリックなど、最初は予測していなかった他のことをそのストリームで実行できることです。収集または分析。
tl;dr;
長期的な柔軟性を確保するには、アプリケーションの各インスタンスがトピック ルーティングに基づいてメッセージをキューに送信するようにします。
昨日の簡単ですぐに使えるようにするには、アプリケーションのインスタンスごとに個別の vhost を使用します。