2

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

私の現在の実装では、特にデータアクセス(NHibernate)に関して、いくつかの問題が発生しています。

現在の実装は次のとおりです。

クライアントアプリケーション(Web)
キューにメッセージを送信します(メモリ内、msmq、azure)

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

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

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

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

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

4

2 に答える 2

3

ハンドラーはメッセージを処理する操作に直接関連付けられているため、それらの存続期間は同じである必要があります。

ある種の作業単位(NHibernate ISession)を使用する場合は、xelibrionsaisとしてトランスポートメッセージごとに1つ持つのがおそらく最善です。1つのトランスポートメッセージには、同じ物理メッセージで到着した場合に一緒に処理する必要がある、より論理的な(アプリケーション)メッセージを含めることができます。

これは、NServiceBusおよびNanoMessageBusで行われる方法です。

于 2011-07-20T10:56:25.250 に答える
1

トランスポートメッセージごとのセッションが好きです

于 2011-07-20T05:06:42.020 に答える