Csharp/C#教程:Azure上的MongoDB连接问题分享


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网站时才会这样。 有什么建议?

每分钟几千个请求是一个很大的负载,唯一正确的方法是控制和限制任何时候可以运行的最大线程数。

由于没有发布关于你如何实现这一点的信息。 我将介绍几种可能的情况。


是时候试验……

常数:

变量:

  • 处理能力:

  • 问题:

    解决方案:

    1. 设置WebJob并将其命名为EnqueueJob 。 此WebJob只有一个目的,即在Queue Storage对要处理的工作进行Queue Storage
    2. 创建一个名为WorkItemQueueQueue Storage Container ,此队列将充当下一步的触发器并启动我们的扩展操作。
    3. 创建另一个名为DequeueJob 。 此WebJob还有一个唯一目的,即从WorkItemQueue取出工作项并将请求发送到您的数据存储。
    4. 将项目放置在WorkItemQueue ,将DequeueJob配置为旋转,在每个项目上启动5个单独的线程,并且当队列不为空时,为每个线程取出工作项并尝试执行出列的作业。
      1. 尝试1,如果失败,请等待并重试。
      2. 尝试2,如果失败,请等待并重试。
      3. 尝试3,如果失败,将项目排入WorkItemQueue
    5. 将您的网站配置为自动缩放到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

    (0)
    上一篇 2021年12月28日
    下一篇 2021年12月28日

    精彩推荐