3

後ですべてのメッセージを再生できるように、送信するメッセージのコピーを保存する必要があるアプリケーションを構築しています。これは、メッセージの処理が開発の過程で劇的に変化するため必要ですが、データはリアルタイムの観測データであるため、できるだけ早く取得する必要があります。これに直接対処する組み込み機能が見つからないようです。データを永続化するためのカスタム ツールを作成することはできますが、そもそも NServiceBus を使用する目的と矛盾しているようです。私が検討しているいくつかのオプション:

  1. ターゲット バスの ForwardReceivedMessagesTo 機能を使用してアーカイブ キューを作成し、このアーカイブ キューを入力キューとして使用して、Replayer ツールが実行されるたびにメッセージをターゲット バスに転送する単純なアプリケーションを構築します。これによりアーカイブ キューがクリアされるため、最初に mqbkup ユーティリティを使用してバックアップする必要がありますが、これはリプレイ プロセスの一部として自動化できます。または、2 つの交互のアーカイブ キュー (1 つは新しいメッセージを取り込み、もう 1 つは再生用) を使用すると、これを解決できます。

  2. パブリッシュ/サブスクライブ モデルを使用し、アーカイバにターゲット キューをサブスクライブさせて、メッセージをアーカイブ キューに配置します。上記のような Replayer ツールは、アーカイブ キューを入力キューとして使用し、メッセージをターゲットに転送できます。これにより、アーカイブ キューもクリアされ、上記の解決策のいずれかが必要になります。

  3. MassTransit の人々は、キュー間のコピーを可能にするBusDriverと呼ばれるものについて言及していますが、それ以上のことは見つかりません。

私の主な関心事は、データが失われる可能性が最も低いアプローチを選択することです。観察が行われると、狭い時間枠の外では二度と行うことができないからです。これは一般的な問題のようですが、簡単な解決策を見つけることができないようです。提案?

更新ジャーナリングされたターゲット キューを使用することにしました。アーカイバにジャーナルを入力として使用させ、メッセージをデータベース (ファイルベースの場合もあります) に保存し、そのデータベースからターゲット キューへのメッセージを再生できるようにします。ジャーナル キューからターゲット キューにメッセージをコピーするツールを作成することは可能ですが、実際の問題は、実際的な観点からは、ジャーナル キューを管理することです。簡単にバックアップすることはできません (mqbkup NServiceBus レベルの抽象化に固執したい場合は、キューで非破壊的に操作するために、MSMQ ベースのツールを作成する必要があります。最終的に、MSMQ はトランスポートであり、メッセージのストアではないため、そのように扱う必要があります。

4

2 に答える 2

1

最初のオプションは実行可能のようです。NSB には、メッセージを再生する ReturnToSourceQueue.exe というツールが付属していることを付け加えておきます。メッセージを保持するためにジャーナリングをオンにすることもできますが、それはロールされないため、何かをクリーンアップする必要があります。私たちは NetApp を持っており、その SnapMirror を使用してキュー データをバックアップしました。同様のものが世の中にあると確信しています。

于 2011-03-12T13:54:03.783 に答える