2012-12-15 7 views
5

私は現在SignalR inとASP.Net MVC 4 appliationを使用しています。私はRabbitMQからメッセージを消費しており、本質的には、新しいメッセージがキューにヒットするたびにSignalRを介してブロードキャストする必要があります。問題は通常の使用であり、長命のオブジェクトがIIS内に存在する場所はありません。私は約1000のメッセージを毎秒受け取っているので、サービス/アプリケーションを監視している外部のキューから要求を出すことによって、IISにメッセージをプッシュする標準的なアプローチは、私のIISをかなり殺すでしょう。どのようにIIS/ASP.Net内で長命のオブジェクトを作成しますか?

バックグラウンドスレッドでシングルトンインスタンスを作成するという一般的な考え方があります。 iisでこれを行う最善の方法が何であるかわからない場合は、アプリケーションが終了した場合にシングルトンを自動的に再作成したい。

+0

AutofacのようなIoCコンテナでは、特定の依存関係をシングルトンとして設定できます.AppDomain全体で単一インスタンスを維持し、必要な場所からアクセスできます。 – blaster

答えて

1

あなたは頻繁にメッセージをチェックするバックグラウンドスレッドで何かを考えていますか?

私はquartz.netを使用して過去にスケジュールされたジョブを作成しています。彼らはセットアップがかなり簡単です。基本的に言うと、このジョブをy時間に開始するx間隔ごとに実行することができます。どのような解決策をとっても、おそらくエラー処理を追加する必要があります。私はあなたの石英の仕事は、たとえそれが例外を投げたとしても、毎xの間隔を実行しようとしていると思いますが、最初に何が例外を引き起こしたのかを確認する必要があります。それ以外の場合は、実行するたびに失敗します。 I.あなたのメッセージに何か問題がある場合は、あなたがそれを試してブロードキャストするたびにエラーになるような気がします。

アプリケーションのIdleTimeoutに注意してください。 IISがWebアプリケーションをスリープ状態にすると、バックグラウンドワーカー/クォーツジョブでシングルトンもスリープ状態になります。 IdleTimeoutを0に設定すると、アプリケーションはスリープ状態にならなくなります。

Global.asax.cs Application/Start()でジョブ/ワーカーを初期化すると、Webアプリケーションの実行時にジョブが常に開始されます。

初めてアプリをデプロイしたり、アプリを更新したり再起動したりするときは、アプリが動作していることを確認する必要があります。これにIISの設定があるかどうかは不明です。しかし、通常は、リクエストが行われるまでアプリケーションは起動しません。がんばろう。あなたがこれに対する解決策を見つけたら教えてください。

他の理由でアプリがクラッシュした場合も同じです。あなたはあなたのWebアプリケーションを再起動するために何かが必要です。

希望に役立ちます!

関連する問題