延迟查看Azure队列消息

时间:2015-10-20 11:31:47

标签: azure azure-cloud-services azure-queues

我在Visual Studio中以调试模式运行我的云服务,我看到我的实时站点上的按钮点击事件发生了很大的延迟,并且在我的云服务调试会话中遇到了断点。从按钮单击开始大约需要20-30秒,直到出现队列消息。这是正常的吗?这是因为在调试模式下运行,还是大致代表了它在生产中的样子?这是我的第一个云服务项目,所以我还在学习旋转。我是唯一一个打云服务的人,因为它仍处于开发阶段。

编辑以添加代码调用。

以下是我在网站上发出的电话。队列消息只是一个文件名,因此消息有效负载非常小。

CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

//Retrieve a reference to a queue.
CloudQueue queue = queueClient.GetQueueReference("queue");

//Create the queue if it doesn't already exist.
queue.CreateIfNotExists();

//Create a message and add it to the queue.
CloudQueueMessage message = new CloudQueueMessage(filename);

queue.AddMessage(message, timeToLive: TimeSpan.FromMinutes(1), initialVisibilityDelay: null);

此调用大约需要30秒才能在WorkerRole中获取:

        // Retrieve a reference to a container.
        CloudBlobContainer container = blobClient.GetContainerReference("mycontainer");
        CloudBlobContainer hmtlcontainer = blobClient.GetContainerReference("conthtml");

        // Create the container if it doesn't already exist.
        container.CreateIfNotExists();
        hmtlcontainer.CreateIfNotExists();

        // Create the queue client
        CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

        // Retrieve a reference to a queue
        CloudQueue queue = queueClient.GetQueueReference("queue");

        try
        {
            // Look for a new queue message
            CloudQueueMessage peekedMessage = queue.GetMessage(visibilityTimeout: TimeSpan.FromSeconds(3)); 

2 个答案:

答案 0 :(得分:1)

不,延迟不应该那么长。我肯定认为它与远程调试有更多关系。 IDE和调试过程之间有很多信息。当我进行远程调试时,我可以看到它需要一段时间。除非绝对有必要从正在运行的云环境进行调试,否则我倾向于使用模拟器进行调试。

话虽如此,如果我是你,我会在您的日志记录中添加一些遥测信息,以查看您何时收到消息,处理消息的时间等等。然后,当您在调试之外运行时,您需要进行调查。我会更好地了解实际的处理过程。另请注意,您可以查看InsertionTime的队列消息的属性,并将其与处理器选择它的时间进行比较,以查看它在队列中的时间长度。

答案 1 :(得分:0)

MikeWo's answer是正确的,以确定为什么您会看到如此多的延迟,您需要找出代码中实际来自延迟的位置。如果你发布特定的电话或电话很慢,我们可能会提供更好的建议。事实上,我们在很大程度上只是猜测。话虽这么说,我想补充一些假设,假设延迟与Azure存储有关:

  1. 它不会解释所有延迟,但会检查您实际呼叫的世界中的哪个位置。如果您的存储帐户位于亚洲并且您位于加利福尼亚州,那么如果您的代码在靠近数据中心的位置运行,您将看到更多延迟。
  2. 特定于队列消息,请在放置消息时检查可见性超时是否为低(或0)。如果您的消息可见性超时为30秒,则实际上不会显示获取30秒。
  3. 确认您实际制作了多少存储空间。如果您正在创建队列,放置消息,轮询等等,那么对于小消息,它将比引用的10毫秒要多得多。如果您根据Mike的建议弄清楚哪个很慢,那将有助于您进一步调试。