1

私は、とりわけ、給与、高負荷プロセスを実行するシステムに取り組んでいます。間もなく、ピーク時に給与を実行する要求が非常に多くなり、バッチサーバーが圧倒される可能性があります。

MSMQを使用してこれに対処するための概念実証をまとめたいと考えています(おそらくこれを後でnservicebusのような商用ソリューションに置き換えます)。この例をベースとして使用します。バインディングを設定して貼り付ける方法はわかりますが、WASによってホストされているサブスクライバーに、ビジーでない場合にのみ「重い給与プロセスの実行」メッセージを処理するように指示する方法が必要です。そうしないと、キュー上のメッセージがすぐに取得され、以前と同じ問題が発生します。

「忙しいので、メッセージを受け取れないので、キューに入れておきます」と言うようにサブスクライブサービスを設定できますか?キューはトランザクションである必要がありますか?

4

2 に答える 2

1

WCFを使用している場合、チャネルを条件付きでアクティブ化して、後でメッセージをキューに残す方法はありません。

より良い解決策は、たとえばWindowsサービスなど、まったく異なるプロセスでメッセージ受信者をホストすることです。これらは、サービスウィンドウの要件に応じて有効/無効にできます。

また、メッセージレシーバーを非常に簡単にスケールアウトして、より大きな負荷を処理できるという追加の利点も得られます(レシーバーのより多くのインスタンスをホストすることにより)。

于 2012-12-12T16:09:04.093 に答える
0

これを行う1つの方法は、2つのキューを持つことです。ポーリングは常に優先度の高いキューを最初にチェックし、そのキューにアイテムがない場合にのみ、他のキューからアイテムを取得します

于 2012-12-12T16:11:59.300 に答える