2017-01-25 10 views
0

私は、(amqpを使って)単一の交換に公開するアプリを持っています。さらに、この取引所からのメッセージを消費することに関心のある多くのアプリがあります。そのために、キューからキューへのバインディングを作成します。RabbitMqを設定して、複数のアプリが自分のキューと共有交換へのバインディングを管理できるようにする方法

各アプリのキューとバインディングは、そのアプリとそのアプリが接続するユーザーによってのみ管理できるようにしたいと考えています。仮想ホストを使用して、各アプリケーションのユーザが読み取りアクセス権を持ち、各アプリケーションのキューとバインディングがユーザが完全にアクセスできる仮想ホスト/<app>仮想ホストに存在する/common仮想ホストに入るようにしました。

しかし、ドキュメントでは、チャネル内で複数の仮想ホストに同時にアクセスすることはできず、APIはbindQueue()の一部として仮想ホストを指定するオプションを提供していないことを示しています。

これを達成する方法はありますか?

答えて

0

私はあなたがフェデレーションを使用する必要が尋ねたものを達成することだと思います。 私は同じドメインの問題があります。 異なるキューから1つのエクスチェンジと異なるアプリケーションを消費します。 私はこのステップが正しいとします:

Exchange A =>フェデレーションTo Exchange 1/2/3/4/...これらの交換は、互いに異なる仮想ホストを持ちます。

さまざまなアプリケーションで異なるvhostとユーザーを作成します。 別の交換機へ(所1/2/3/4 /を)これらのバーチャルホストへのアクセスを与える

1/2/3/4/

異なるExchangeからバインドするために別のキューを作成するには、この明確ですか?

+1

こんにちは - 私はあなたが答えを持っていると思います。私は既に使用しているシャベルプラグインを使っても可能かもしれないと私は考えています。リードしてくれてありがとう。 – Tom

0

キューはrabbitmqによって管理されます。消費者はそれらを管理することはできません。消費者は、このパラメータセットまたはそのセットを使用してキューを作成/宣言できます。これらのパラメータの1つは "exclusive"であり、現在の接続だけがキューにアクセスできることを示します。

仮想ホストは接続時に指定されているようにバインドされていないため、別のスレッドでこれを行う必要があります。どちらか、それともあなたの幻想を再構成してください。

多分あなたはそれを必要とせず、ルーティングキーを持ち、 '/ app'仮想ホストの代わりに排他キューを宣言し、 '/ common'仮想ホストの代わりにファンアウト交換を持つだけで十分でしょう。

+0

ルーティングキーを使用します。一般的な交換機を通過するさまざまなメッセージがあり、各アプリはさまざまなメッセージの選択に興味があるため、興味のあるキューにルーティングします。問題は、アプリがログインするユーザーが開発者がコンソールにログインするために使用する)は、キューを管理できるようにすべてを実行する特権を持っています。彼らのアプリケーションが使用するキューだけに権限を制限したいと思います。 – Tom

1

接続文字列に仮想ホスト(仮想ホスト)を指定します。 Vhostsを使用すると、1つのブローカ上のアプリケーションを分離することができます。ユーザー、交換、キューなどを特定の仮想ホストに隔離することができます。環境を分離することができます。複数のブローカーを設定するのではなく、同じブローカー内の別の仮想ホストにステージングすることができます。

https://devcenter.heroku.com/articles/cloudamqp#separate-applications

+0

私はそれを理解しています。私の問題は、複数のアプリを別々にしたいが、同じエクスチェンジにバインドする必要があるということです。私は各アプリを自分のユーザーを使ってログインさせ、別のアプリのキューにアクセスすることなく独自のキューを作成して共有交換にバインドできるようにしたい。各アプリにvhosts * vhost1 *と* vhost2 *があり、vhost * common *にエクスチェンジがある場合、* vhost1 *のキューを* common *のエクスチェンジにバインドする方法はないようです。 – Tom

関連する問題