1


0

MSMQ-メッセージキューの抽象化とパターン

最初に問題を定義し、メッセージキューが選択された理由を説明します。 私はトランザクションのデータレイヤーを持ち、非常に重いものを挿入し、これらの問題が発生したときに対処しようとしていますが、これを念頭に置いてアプリケーションをゼロから実装したいと考えています。

Microsoft Message Queueを使用してこの問題に取り組み、時間が許す限り非同期で挿入を実行することにしました。 しかし、すぐに問題に遭遇しました。 私が実行する特定の挿入は、すぐにリコール(つまり、取得)する必要がある場合があります(これはPOSシステムであり、最後のトランザクション(まだ挿入されていないトランザクション)をリコールする必要がある場合はどうなるでしょう)。

この問題に取り組むことを決めたのは、MessageQueueを抽象化し、データアクセスレイヤーで結合することにより、データレイヤーのユーザーに返される単一のデータセットの錯覚を作成することです(このような状況で発生する他の問題を検討しましたシナリオ(つまり、本質的にダーティリードなど)および私の目的のためにこれらの問題を制御できると結論付けました)。

しかし、これは物事が少し厄介になる場所です…​ 私はメッセージを取り戻す方法などを考え出しました(些細な問題)が、私が立ち往生しているのは、メッセージキューをクエリする一般的な(または少なくともある程度一般的な)方法を作成するにはどうすればよいですか? SQLクエリとMessageQueueクエリ間の重複を最小限に抑えることができるもの。 私はLINQを使用することを検討しましたが(技術についての理解は非常に限られていました)、Predicatesを使用した実装も試みましたが、これはかなり臭いです。

私が利用できるこのような問題のパターンはありますか? 私はこれについて間違った方向に進んでいますか? この問題にどのように取り組むことができるかについて、誰もが自分の考えを持っていますか? 誰も私が話していることを理解していますか? :-)

すべての入力は高く評価され、真剣に検討されます…​

再度、感謝します。

_ 興味のある方へ。 結局、トランザクションを別の場所に単純にキャッシュし、MSMQを意図したとおりに使用することを決定しました。 _

1 Answer


1


キューに大量のメッセージがある場合、それらのメッセージを列挙することは深刻なボトルネックになります。 MSMQは先入れ先出しの種類のアクセス用に設計されており、そのパターンに従わないものはパフォーマンスの面で多くの悲しみを引き起こす可能性があります。

答えは実行するクエリの種類に大きく依存しますが、答えは何らかの種類の非SQLデータベース(CouchDBまたはBerkeleyDBなど)である可能性があります