サイトに大量のトラフィックがある場合にデータベースの負荷を制限するために、メッセージが実行されるレベルを調整できるようにしたいと思います処理されます。
これがユースケースです。
ユーザーが Web サイトの一部のデータを変更すると、データの新しい行がより大きなオブジェクトに保存されます。次に、メッセージをキューに追加して、より大きなオブジェクトを検索データベースで更新する必要があることを伝えたいと考えています。
別のマシンの Windows サービスが、抑制された方法でキューからメッセージを読み取ります。次に、SQL データベースからオブジェクトを完全に引き出し、検索 poco に変換してから、検索データベースでそのオブジェクトを更新します。
x秒ごとにスケジュールされたジョブを実行して、キューから1つ読み取って処理するか、他の調整メカニズムを使用することができると思います。
テストされていない最初の種類の試みを下に含めました(それは明日のためです)、
私は c# でプログラミングしており、クォーツ ネット スケジューリング ライブラリによって実行されるジョブでサービス スタック ライブラリを使用しています。
おそらく、これを行うためのはるかに良い方法がありますか?
public class UpdateJob : IJob
{
public void Execute(IJobExecutionContext context)
{
var redisFactory = new PooledRedisClientManager("localhost:6379");
var mqHost = new RedisMqServer(redisFactory, retryCount: 2);
mqHost.RegisterHandler<UpdateMessage>(m =>
{
// do the proper logic here.
Console.WriteLine("Received: UpdateId [" + m.GetBody().Id + "]");
return;
});
mqHost.Start();
}
}
また、メッセージが時々失われてもあまり気にしないので、redis がクラッシュした場合のメッセージの持続性は問題になりません。それが起こった場合、検索データベース全体を最初から再構築するだけで十分です。