Azure上的MongoDB连接问题
我们将一个ASP.NET MVC应用程序部署到Azure网站,该网站连接到MongoDB并执行读写操作。 应用程序迭代地执行此操作。 每分钟几千次。
我们使用Autofac初始化C#驱动程序,并按照https://groups.google.com/forum/#!topic/mongodb-user/_Z8YepNHnbI和其他一些地方的建议将MaxConnectionIdleTime设置为45秒。
我们仍然收到大量以下错误:
无法从传输连接读取数据:连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接的主机无法响应而建立的连接失败。 方法消息:“:{”ClassName“:”System.IO.IOException“,”消息“:”无法从传输连接读取数据:连接尝试失败,因为连接方在一段时间后没有正确响应,或已建立的连接失败,因为已连接的主机无法响应。
在连接到Azure上相同数据中心/区域中的VM上部署的MongoDB实例时,以及连接到外部PaaS MongoDB提供程序时,我们会收到此错误。
我在本地计算机上运行相同的代码并连接到同一个数据库,但我没有收到这些错误。 只有当我将代码部署到Azure网站时才会这样。 有什么建议?
每分钟几千个请求是一个很大的负载,唯一正确的方法是控制和限制任何时候可以运行的最大线程数。
由于没有发布关于你如何实现这一点的信息。 我将介绍几种可能的情况。
是时候试验……
常数:
变量:
处理能力:
问题:
解决方案:
- 设置
WebJob
并将其命名为EnqueueJob
。 此WebJob
只有一个目的,即在Queue Storage
对要处理的工作进行Queue Storage
。 - 创建一个名为
WorkItemQueue
的Queue Storage Container
,此队列将充当下一步的触发器并启动我们的扩展操作。 - 创建另一个名为
DequeueJob
。 此WebJob
还有一个唯一目的,即从WorkItemQueue
取出工作项并将请求发送到您的数据存储。 - 将项目放置在
WorkItemQueue
,将DequeueJob
配置为旋转,在每个项目上启动5个单独的线程,并且当队列不为空时,为每个线程取出工作项并尝试执行出列的作业。- 尝试1,如果失败,请等待并重试。
- 尝试2,如果失败,请等待并重试。
- 尝试3,如果失败,将项目排入
WorkItemQueue
- 将您的网站配置为自动缩放到x个cpu(请注意您的网站和Web作业共享相同的资源)
这是一段短短的10分钟video ,概述了如何利用队列存储和Web作业。
编辑:
你可能会遇到这些错误的另一个原因可能是因为另外两个因素,再次是因为它在MVC应用程序中…
如果您正在使用DEBUG
属性编译应用程序但是推送了RELEASE
版本,则由于web.config
的设置而导致问题,而没有DEBUG
属性,ASP.NET Web应用程序将运行请求如果请求的时间超过此时间,则最多90秒,它将处理该请求。
要将超时增加到90秒以上,您需要更改web.config
的[httpRuntime][3]
属性…
您需要注意的另一件事是浏览器> Web应用程序的请求超时设置,我会说,如果您坚持将代码保留在MVC中而不是将其提取并放入WebJob,那么您可以使用以下代码将请求发送到您的Web应用程序并抵消请求的超时。
string html = string.Empty; string uri = "https://google.com"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); request.Timeout = TimeSpan.FromMinutes(5); using (HttpWebResponse response = (HttpWebResonse)request.GetResponse()) using (Stream stream = response.GetResponseStream()) using (StreamReader reader = new StreamReader(stream)) { html = reader.ReadToEnd(); }
你在VM中使用mongoDB吗? 这似乎是一个网络问题。 应该发生这种瞬态故障,因此您可以做的最好是实现重试模式或使用像Polly这样的库来执行此操作:
Policy .Handle() .Retry(3, (exception, retryCount) => { // do something });
https://github.com/michael-wolfenden/Polly
上述就是C#学习教程:Azure上的MongoDB连接问题分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1007211.html