4

トランザクション msmq キューを使用しています。新しいアイテムを追加する前に、キュー内のアイテムとまだコミットされていないアイテムをチェックする必要があります。

キュー内のすべてのアイテムを確認できますが、デキューされたがまだコミットされていないアイテムを確認するにはどうすればよいですか?

更新: いくつかのスレーブ インスタンスと 1 つのマスター サーバーがあります。各スレーブは、データ (大きなファイル) をマスターにアップロードし、マスターから新しいデータをダウンロードできます。

スレーブは、マスターのアップロード操作とダウンロード操作を msmq キューに登録してから、トランザクションを開始し、操作をデキューし、大きなファイルで操作を実行し、トランザクションをコミットするか、問題がなければトランザクションをロールバックします。

複数のスレーブが同時に 1 つのファイルをアップロードする必要がないため、ファイルが完全にアップロードされたことを確認するまで、すべてのアップロード登録を拒否する必要があります。

4

1 に答える 1

0

私には、これは MSMQ 関連というよりも、クライアント/サービス構造のアーキテクチャ上の問題のように思えます。

データベースでトランザクションを扱う場合、すべてのクライアントがコミットされた後にのみ変更を確認できると直感的に期待します。あなたのシナリオでは、MSMQ は、DBMS に期待するのと同じように動作します。

全体として、私があなたの仕事を理解している限り、あなたは間違った場所を見ているのではないかと思います。サービスのどこかでアップロードを追跡することを検討してください。クライアントが一度に複数のファイルをアップロードしないようにする必要がある場合は、これを実装する必要があります。

可能な選択肢は、環境によって異なります (まだわかりません)。ある種のキャッシュを使用してクライアント接続を管理したり、ロックを使用してアップロードを同期したり、X 接続のみを受け入れるようにサービスを構成したりできます。

于 2012-04-13T11:06:35.927 に答える