2011-07-19 16 views
2

メッセージハンドラの推奨寿命はどれくらいですか?メッセージハンドラの寿命

私の現在の実装は、特にデータアクセス(NHibernate)に関しては、いくつかの問題を引き起こしています。次のように

私たちの現在の実装は次のようになります。

クライアントアプリケーション(ウェブ)
は(メモリ、MSMQ、紺碧に)キューにメッセージを送信し

ワーカーアプリケーション(Windowsサービス)
キューをポーリングし、登録されたハンドラにメッセージを渡します。

ワーカーを初期化するときに、ハンドラを登録します。ハンドラは遅くロードされ(Lazy<T>を使用)、キュープロセッサが実際に(別のスレッド上で)起動するまで作成されません。

ハンドラに初期化されると、依存関係を記入し、キュープロセッサがシャットダウンされるまでメモリに格納されます。

私たちは、現在、キュープロセッサ上のすべてのハンドラに対して単一のNHibernateのセッションを使用しているという問題があります。より良い解決策は、キュープロセッサの各サイクルでハンドラを再作成することです。つまり、各ハンドラには独自のISessionを持たせることができます。

推奨されるアプローチは何ですか?

答えて

3

あたりのセッションを好みます。

何らかの種類の作業単位(NHibernate ISession)を使用している場合は、トランスポートメッセージごとに1つずつxelibrion saisを持つのが最善の方法です。 1つのトランスポートメッセージには、同じ物理メッセージに到着した場合に一緒に処理する必要があるさらに多くの論理(アプリケーション)メッセージを含めることができます。

これはNServiceBusとNanoMessageBusで行われている方法です。

+0

これは私がやったことです。幸いにも、StructureMapのネストされたコンテナは、メッセージごとにNHibernateセッションを処理する際の救助になりました。 –

+0

また、(キュー・トランザクションに使用される)TransactionScopeが、作業単位と同じ存続時間を持つか、それより良いかどうかを確認する必要があります。 –

1

ハンドラが直接彼らの寿命は同じでなければなりませんメッセージを処理する操作に結ばれているので、私は、トランスポートメッセージ

+1

xelibrionでは、メッセージごとにセッションを使用する技術的な理由を書いてみませんか? 「私は好きです」というのは大きな理由ではありません。 –