Performance Azure队列延迟消息

Performance Azure队列延迟消息,performance,azure,azure-storage,azure-queues,Performance,Azure,Azure Storage,Azure Queues,我对azure队列消息的生产部署有一些奇怪的行为: 队列中的一些消息会出现很大的延迟—几分钟,有时是10分钟。 在我们将消息放入队列时询问设置delayTimeout之前,我们并没有为该消息设置delayTimeout,所以消息应该在放入队列后立即出现。 在那一刻,我们没有太大的负担。所以我的实例并没有工作负载,能够快速处理消息,但它们就是不出现 我们的服务每月处理数百万条消息,我们能够识别出10-50条消息的处理延迟非常大,因为我们在客户面前无法通过SLA 有人知道什么是原因吗 如何克服 有没

我对azure队列消息的生产部署有一些奇怪的行为: 队列中的一些消息会出现很大的延迟—几分钟,有时是10分钟。 在我们将消息放入队列时询问设置delayTimeout之前,我们并没有为该消息设置delayTimeout,所以消息应该在放入队列后立即出现。 在那一刻,我们没有太大的负担。所以我的实例并没有工作负载,能够快速处理消息,但它们就是不出现

我们的服务每月处理数百万条消息,我们能够识别出10-50条消息的处理延迟非常大,因为我们在客户面前无法通过SLA

有人知道什么是原因吗

如何克服


有没有人遇到过类似的问题?

一些常见的故障排除方法:

  • 您确定消息已排队等待处理吗?即queue.addmessage操作已成功返回,然后您正在等待10分钟,这意味着您可以排除任何客户端重试策略等问题的原因

  • 时间计算是否有可能受到某种时钟偏移问题的影响。如果拉取消息的一个工作者角色与其他工作者角色的关闭不同步,您可以看到这一点

  • 在消息似乎延迟的情况下,负责提取消息的工作角色是否可能实际失败或崩溃。如果客户端调用GetMessage,但在invisibilityTimeout设置指定的时间内未响应相应的确认,则消息将再次可见,因为队列服务假定客户端未处理该消息。您可以通过查看这些花费更长时间的消息的出列计数来判断这是否是一个促成因素。更多信息可在此处找到:

  • 是否有可能在一天中的某些时间,您从队列中提取项目的工作人员数量不足,并且延迟仅仅是由于队列的填充速度快于您从队列中提取消息的速度所致

  • 您是否启用了队列日志记录,然后查看是否可以找到特定的操作(查看E2Relationency和serverlatency)。 . 您还应该启用客户端日志记录,并尝试确定客户端是否存在连接问题,以及重试逻辑是否可能启动

  • 最后,如果这些都没有帮助,请将服务器日志(最好是客户端日志)以及您的帐户信息(无密码)发送给Microsoft.com上的JAHOGG


    Jason

    Azure服务总线在BrokeredMessage类中有一个名为ScheduledQueueTimeUTC的属性,它允许您设置消息添加到队列的时间(有效地创建延迟)

    您确定您的代码中没有设置此属性,这可能是延迟的原因吗


    您可以在此url上找到更多信息:

    如果您使用WebJobs来处理队列中的消息,这可能是由于WebJobs配置造成的

    来自pranav rastogi的一份报告:

    从0.4.0-beta版开始,(WebJobs)SDK实现了一种随机指数退避算法。因此,如果队列中没有消息,SDK将退出并减少轮询频率

    以下设置允许您配置此行为

    MaxPollingInterval用于队列保持为空时,检查要发送的消息之前等待的最长时间。默认值为10分钟

    static void Main()
    {       
        JobHostConfiguration config = new JobHostConfiguration();       
        config.Queues.MaxPollingInterval = TimeSpan.FromMinutes(1);        
        JobHost host = new JobHost(config);
        host.RunAndBlock(); 
    }
    

    您使用什么方法/代码读取和处理队列?1。我确信消息已存储到队列中,当消息成功存储到队列存储器2时,我们将记录写入数据库。不,日志记录有消息处理的实际时间,即使我们使用Mssql存储每个消息的日志行—我们使用消息生成时的时间。所以不可能有任何问题。而且MSSQL没有瓶颈3。四号。五号。上周启用,等待结果,早些时候错过了这种可能性,我们的解决方案是在两年多前开发的,当时我们还没有这样的功能。