メッセージハンドラの推奨寿命はどれくらいですか?メッセージハンドラの寿命
私の現在の実装は、特にデータアクセス(NHibernate)に関しては、いくつかの問題を引き起こしています。次のように
私たちの現在の実装は次のようになります。
クライアントアプリケーション(ウェブ)
は(メモリ、MSMQ、紺碧に)キューにメッセージを送信し
ワーカーアプリケーション(Windowsサービス)
キューをポーリングし、登録されたハンドラにメッセージを渡します。
ワーカーを初期化するときに、ハンドラを登録します。ハンドラは遅くロードされ(Lazy<T>
を使用)、キュープロセッサが実際に(別のスレッド上で)起動するまで作成されません。
ハンドラがに初期化されると、依存関係を記入し、キュープロセッサがシャットダウンされるまでメモリに格納されます。
私たちは、現在、キュープロセッサ上のすべてのハンドラに対して単一のNHibernateのセッションを使用しているという問題があります。より良い解決策は、キュープロセッサの各サイクルでハンドラを再作成することです。つまり、各ハンドラには独自のISessionを持たせることができます。
推奨されるアプローチは何ですか?
これは私がやったことです。幸いにも、StructureMapのネストされたコンテナは、メッセージごとにNHibernateセッションを処理する際の救助になりました。 –
また、(キュー・トランザクションに使用される)TransactionScopeが、作業単位と同じ存続時間を持つか、それより良いかどうかを確認する必要があります。 –