我试图找到一个解决方案,可能需要很长的时间和时我们的负载均衡是在Rackspace公司的发送电子邮件的行动。我能找到的关于这个具体问题,唯一的问题是这样的:停止动作需要较长的时间超时负载平衡器
keep load balancer from timing out during long operation
据我了解,我需要运行而主要行动缓慢的另一个动作完成不断轮询,为了保持回事情还活着。我的电子邮件操作包含以下内容:
var sendto = db.Users
.Where(b => b.Id == model.SentTo |
((model.SelectedRoles.Any(s => b.Roles.Select(h => h.RoleId).Contains(s)))
&& ((b.enrollment.Any(h => h.cohort.CourseID == model.CourseID) | model.CourseID == null))
&& (b.OrgID == model.OrgID | model.OrgID == null))).ToList();
foreach (var address in sendto)
{
string Body = "message goes here";
EmailConfig.SendMessageViaMailGun(filestoattach, address.Email, null, email.Subject, Body);
}
所以创建一个列表,然后通过循环用电子邮件发送给每个人名单上。在上面的问题中的异步方法答案似乎它会做的伎俩,但在评论中,我可以看到这被认为是一个坏主意。就最近的MVC版本中的异步工作而言,它也过时了。
我的问题是什么是保持从超时负载平衡器,而它完成这个动作最好的方法是什么?
你应该将这个逻辑Web服务器之外。基本上你的网络服务器应该排队请求(例如给RabbitMQ),然后一个运行在其他地方的独立服务应该将它出队并发送邮件。 – mjwills