我希望能够限制执行消息的级别,以便在我的站点上存在大量流量时限制数据库的负载,然后队列将手风琴出来了,在小批量的时候,队列将被处理。使用服务堆栈限制Redis消息队列执行
这是用例。
用户更改了我们网站中的一些数据,这些数据将数据的新行保存到更大的对象中。然后,我想向队列中添加一条消息,以表示需要在我们的搜索数据库中更新较大的对象。
另一台机器上的Windows服务以受限制的方式从队列中读取消息。然后它会将对象全部从SQL数据库中取出,将它们转换为搜索poco,然后在搜索数据库中更新该对象。
我想我可以运行一个计划任务,每隔x秒会读取一个队列并处理它,或者使用其他一些节流机制。
以下附上我的第一种尝试是未经测试(这是为明天)的,
我在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的崩溃是不是一个问题困扰。如果发生这种情况,我只需从头开始重新构建整个搜索数据库就足够快了。