25

ユーザーがキューからメッセージを再生できるようにする再生メカニズムを設計しようとしています。複数のキューと複数のコンシューマーを含む取引所に対して私が思いついた最良の設計は次のとおりです。

  1. 次のようなレコーダー サービスを作成します。

    • キューを作成し、すべてのルーティング キーをそれにバインドします。
    • 交換からのすべてのメッセージを消費します。
    • すべてのメッセージを DB に保存します。
  2. サブスクライバーのリプレイ要求。

    • 各サブスクライバーは、新しいエクスチェンジ、キューを作成し、通常のキューと同じバインディングでそれにバインドします。
    • サブスクライバーは、フィルター (開始日など) を使用してリプレイを開始するために、残りの要求を Web サーバーに送信します。リクエストには、そのリプレイ交換名が含まれています。
    • Web サーバーは DB からデータを取得し、特定の取引所に公開します
    • RequestId を添付してエコーバックするなどの改良を加えることができます。

ここに画像の説明を入力

質問:
1. それは理にかなっていますか?
2.私は車輪を発明していますか? うさぎ固有の解決策はありますか?プラグイン?
3. 複数の取引所を作成することは良い習慣と考えられますか?
このソリューションでは、同じメッセージを発行するために、各キューの交換が作成されます。

別の解決策:
1. キューごとに追加のキュー「ReplayQueue」を作成します。TTL を設定します (1 か月としましょう)。
2. ユーザーがリプレイを要求するたびに、応答せずに独自の ReplayQueue からリプレイできるようにします。

このソリューションは少し問題があります。

  • 最終日を再生するには、消費者はそれ以前の 29 日間をすべて取得して、それらを除外する必要があります。
  • このソリューションはスケールアップします - キューは大きくなります (スケールアウトできる db ストレージとは異なります)。
4

2 に答える 2

8
  1. それは理にかなっていますか?

はい

  1. 私は車輪を発明していますか?うさぎ固有の解決策はありますか?プラグイン?

車輪を再発明しているわけではありません。私の知る限り、ウサギのソリューションはなく、すぐに使えるソリューションもありません。

あなたの最初の解決策は私の意見では良いです。健康なウサギは空のウサギであり、ウサギはデータストアではないため、これAnother solutionは非常に問題です。

STOREパブリッシュされたすべてのメッセージがルーティングされるキュー ( ) が作成されます。すべてのバインド キーでバインドする代わりにSTORE、トピック交換の使用を検討できます。バインディング キーに含めてはならない代償と. # *、メッセージがルーティングされるときのわずかなオーバーヘッド。STOREキューはバインディング キーでバインドされます#

firehoseを見ることができます。

Web リクエストの理由 RPC 呼び出しで Rabbit を使用できます。

  • サブスクライバーは、フィルター (startdate など) を使用して再生を開始する amqp 要求を送信します。
  • Request にはreply-toキュー名が含まれます。キューは、クライアントとリクエスト専用である場合があります。
  • RPC サーバーが DB からデータを取得し、返信先キューに発行します。

また、直接返信パターンを確認することもできます。

  1. 複数の取引所を作成することは良い習慣と見なされますか?

はい、必要になったらすぐに。あなたの特定のケースでは、私の意見では、加入者ごとの交換は必要ありません。リクエストにはすでにキュー名が含まれています。amq.directキュー名と同じルーティング キーを持つデフォルトの交換を使用して、このキューに簡単に発行できます。交換が必要な場合は、一意の交換 (「リプレイ」など) を作成し、各サブスクライバーにリプレイ キューをこの交換にバインドさせます。「リプレイ」交換は、慣習であるか、要求とともに送信されます。

于 2015-04-15T11:00:30.830 に答える
2

最初の解決策は実現可能です。rabbit MQ には が付属しているためtracing plugin、メッセージを DB に保存するのはさらに簡単になりますamq.rabbitmq.trace

この交換は に固有でありvhost、すべての仮想ホストには独自のamq.rabbitmq.trace交換があります。さらに、新しいトレースを作成するときに、トレースを有効にするキュー/エクスチェンジを制限することができます。これにより、必要のないトレースを無効にする柔軟性が得られます。

トレースを構成するには、次のリンクを参照して
ください
。 -消防ホース/

于 2015-09-20T17:50:21.557 に答える