我希望能够限制执行消息的级别,以限制我的数据库上的负载,如果我的站点上有大量流量,那么队列将六角形,在低流量时队列将被处理。
这是用例。
用户对我们网站中的某些数据进行了更改,从而将新的数据行保存到更大的对象中。然后我想向队列中添加一条消息,说明更大的对象需要在我们的搜索数据库中更新。
另一台机器上的 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 崩溃,消息的持久性不是问题。如果发生这种情况,我只需从头开始重建整个搜索数据库就足够快了。