【发布时间】:2017-10-13 11:45:04
【问题描述】:
我正在尝试为发送电子邮件操作寻找解决方案,该操作可能需要很长时间并且会使 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);
}
因此,创建了一个列表,然后循环发送电子邮件给列表中的每个人。上述问题中的 Async 方法答案似乎可以解决问题,但在 cmets 中我可以看到这被认为是一个坏主意。就最新 MVC 版本中的异步工作方式而言,它也已过时。
我的问题是,在负载均衡器完成时防止此操作超时的最佳方法是什么?
【问题讨论】:
-
您应该将该逻辑移到 Web 服务器之外。基本上,您的 Web 服务器应该排队一个请求(例如到 RabbitMQ),然后在其他地方运行的单独服务应该将它出列并发送电子邮件。
标签: c# asp.net-mvc asp.net-mvc-4 async-await polling