問題タブ [rabbitmq-shovel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
erlang - RabbitMQ / Erlang で複数の構成ファイルを使用する方法
ノード間でメッセージを配信するためにローカルにインストールされた RabbitMQ サーバーを使用する Spring ベースの Java アプリケーションをセットアップしようとしています。すでにご存じの方もいらっしゃると思いますが、rabbitmq.config ファイルを使用してさまざまなパラメーターを構成でき、Rabbit サーバーが実行される基礎となる Erlang ノードによってロードされます。
私の問題は、構成の一部を静的にする必要があり、一部を動的にする必要があるという要件があることです。具体的には、ユーザーの操作の結果として、Rabbit サーバーで実行されているシャベルを時々再構成できるようにする必要があります。 (つまり、構成ファイルをプログラムで変更し、ウサギのサーバーを再起動して有効にする必要があります)。それを読んで)。
Erlang 構成ファイルのマニュアル ( http://www.erlang.org/doc/man/config.html ) を読んで解決策があると思いました。ファイルは Erlang によってマージされます。残念ながら、まったく機能していないようで、オンラインでこの問題への言及を見つけることができませんでした。
RabbitMQ 3.1.3 と Erlang 5.10/OTP R16 を使用して Windows 7 x64 OS でこれをテストしています。
最初の設定ファイル:
2 番目の構成ファイル:
パスにも単一のバックスラッシュまたはビット文字列を使用しようとしましたが、問題にはならなかったようです。
cmd でサーバーを実行した場合の出力は次のとおりです。
あらゆる種類の解決策または支援をいただければ幸いです。
ありがとう。
rabbitmq - いつ RabbitMQ shovels を使用し、いつフェデレーション プラグインを使用しますか?
私が働いている会社では、RabbitMQ をメインのメッセージ バスとして使用したいと考えています。私たちが持っているアイデアは、すべての単一のアプリケーションが内部通信に独自の vhost を使用し、シャベルまたはフェデレーション プラグインを介して、特定のタイプのイベントを複数の vhost (おそらく複数のマシン (非クラスター化) でさえも) で共有できるようにすることです。 . 仮想ホストごとのアプリケーションを選択して、内部通信を公開イベントから分離し、アプリケーションごとにセキュリティを調整できるようにしました。
RabbitMQ Web サイトで公開されている情報に基づくと、シャベルを選択する必要があるとき、またはフェデレーション プラグインを選択する必要があるときはわかりません。
RabbitMQ には、いつ何を使用するかについて次の説明があります。
通常、フェデレーションが提供する以上の制御が必要な場合は、シャベルを使用してインターネット経由でブローカーをリンクします。
フェデレーションを選択したときに欠けているシャベルの細かい制御は何ですか?
現時点では、フェデレーション プラグインが提供する REST API を介して仮想ホスト間通信を自動化できるため、フェデレーション プラグインを好むと思います。シャベルの場合、仮想ホスト間でイベントを共有するたびに、シャベルの構成を変更して RabbitMQ インスタンスを再起動する必要があります。これについて私の考えは正しいですか?
現在、Windows で RMQ を実行しており、クライアントは .NET から接続しています。近い将来、Java/Perl/PHP クライアントが参加する予定です。
私の質問を要約すると:
フェデレーションを選択したときに欠けているシャベルの細かい制御は何ですか?- ショベルを使用するときに仮想ホスト間通信を変更する唯一の方法は、構成ファイルを変更してインスタンスを再起動することであるというのは正しいですか?
- セットアップ (アプリケーションごとの vhost) は理にかなっていますか、それとも要点を完全に見逃していますか?
rabbitmq - 分散型 POS の RabbitMq アーキテクチャ
既存のレガシー システムを置き換えるために、食料品の POS システムを開発しています。製品/価格の変更をレジに送信するためにRabbitMQを使用して評価しています。
会社には 1 ~ 50 の店舗があり、各店舗には 1 ~ 20 のレジがあります。店内のレジはすべて同じデータを受け取ります。
企業ごとに 1 つの中央バックオフィスがあります。
バックオフィスと各店舗にRabbitブローカーがいます。
私の現在の設計では、バックオフィス ブローカーには店舗ごとにキューが設定されています。バックオフィス サーバー ソフトウェアは、これらのキューに変更をプッシュします。
ストア ブローカーにはファンアウト交換があります。レジがストア ブローカーに接続すると、永続的なキューが作成されます (まだ存在しない場合)。
バックオフィス ストア キューからストア エクスチェンジへの動的シャベルをセットアップしました。レジキューはすべて耐久性があり、メッセージは永続的であるため、これは信頼できるはずですよね?
私が達成しようとしていることを十分に説明できたことを願っています。これはまともな解決策のように思えますか?それとももっと良い方法がありますか?
queue - rabbitmQ でいくつかのメッセージを破棄する方法
制御できない取引所のキューからデータを取得する必要があるユース ケースがあります。ユースケースは、このキューから常にメッセージを取得することです。ローカル データストアに保存する前に、rabbitmq で、またはプラグインを使用/作成することで、メッセージの 90% を一度に破棄できるかどうか疑問に思います。これは、すべてのメッセージを保存することはできず、10% しか保存できないためです。明らかに、私のアプリケーションでそうする方法の1つです。しかし、rabbitmqレベルでそれを行う方法があるのだろうか.
これについて何か考え/解決策があるかどうか疑問に思っています。
rabbitmq - RabbitMQ の動的シャベル構成エラー - 「コンポーネント シャベルが見つかりません」
Shovel プラグインをインストールした後、RabbitMQ 3.2.3 で動的シャベルを構成しようとしています。ただし、次のコマンドを実行すると:
...次のエラー メッセージが表示されます。
プラグインは正しくインストールされているようです。私が実行した場合:
...私は得る:
また、私が実行した場合:
...私は得る:
何か案は?!前もって感謝します!
configuration - rabbitmq 3.3.4 ショベル構成が開始プロセスをクラッシュさせている
構成ファイル (docker で実行) を介して shovel プラグインを構成しようとしていますが、次のエラーが発生します。
開発環境がスピンアップすると、ショベルの宛先がオンデマンドで作成されるため、構成はこのように設定されます...ソースは、新しい開発環境が接続される実行中の永続的なrabbitmqインスタンスです。
設定ファイルの内容は次のとおりです。
[更新] これは docker で実行されていますが、docker で問題をデバッグできなかったため、同じ構成ファイルを使用してローカルでウサギを起動してみました。設定したウサギの設定システム変数 (RABBITMQ_CONFIG_FILE) がログに反映されておらず、シャベルの設定が適用されていないことにログで気付きました (驚くことではありません)。echo ステートメントで変数を確認したところ、正しいパスが表示されました: /dev/rabbitmq_server-3.3.4/rabbitmq
ありがとう!
rabbitmq - ローカル接続に amqp://user:password@localhost の代わりに amqp://user:password@ を使用できますか?
その短縮構文を使用できますか? このような短い amqp url を使用すると、rabbitmq がより効率的な「ダイレクト」モードで動作するようになることが示唆されています。ただし、そのようなシャベルのローカル接続設定を変更すると、それらの接続が接続リストに表示されなくなります。
rabbitmq - 複数の rabbitMQ インスタンスにわたる RabbitMQ RPC
それぞれ独自の RabbitMQ インスタンスを持つ 3 つのクライアントがあり、独自の RabbitMQ インスタンスを持つアプリケーション (appA と呼びましょう) があり、3 つのクライアント アプリケーション (app1、app2、app3) は appA のサービスを利用したいと考えています。
appA のサービスには RPC 通信が必要で、app1、app2、app3 にはそれぞれ booking.request キューと booking.response キューがあります。
shovel プラグインを使用すると、すべての booking.request メッセージを app1-3 から appA に転送できます。
これで、appA は booking.response キューのリクエストに応答します。app1、app2、または app3 のいずれかの正しい booking.response キューに戻るには、rabbitMQ-appA の予約応答メッセージが必要ですが、それらすべてにではありません。独自の booking.response キューで応答を期待している正しい rabbitMQ (app1、app2、app3) に応答を転送する、rabbitMQ-appA にシャベル/フェデレーテッド キューをセットアップしますか?
これらのアプリはすべて spring-amqp を使用しています (関連する場合)。または、Spring で複数の rabbitMQ キューをリッスンし、それぞれから消費する rabbitMQ テンプレートをセットアップすることもできます。
ドキュメントから、これは典型的な消費者がどのように見えるかです:
接続ファクトリーがRabbitMQの同じインスタンスにあるが、vhostが異なる場合でも、これを行うために複数の接続ファクトリーを指定することは可能ですか?
更新:
Josh の回答に基づいて、複数の接続ファクトリが必要です。
次に、SimpleRoutingConnectionFactory を使用して両方の接続ファクトリをラップします。
ここで、rabbitMQ テンプレートを宣言するときに、個々の接続ファクトリではなく、SimpleRoutingConnectionFactory を指すようにします。
...そして、通常使用するようにテンプレートを使用します...
// メッセージは両方の rabbitMQ インスタンスから消費されます
... と ...
// メッセージは両方のキューにパブリッシュされます
私は正しいですか?