延迟查看 Azure 队列消息
Delay seeing Azure queue message
我 运行 我的云服务在 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));
不,延迟根本不应该那么长。我肯定认为它与远程调试有更多关系。 IDE 和调试进程之间有很多信息。当像这样进行远程调试时,我可以看到它需要一段时间。我倾向于使用模拟器进行调试,除非绝对有必要从 运行ning 云环境进行调试。
话虽这么说,如果我是你,我会在你的日志记录中添加一些遥测数据,以查看你何时收到消息、处理消息需要多长时间等。然后当你 运行 在调试之外您将更好地了解实际处理过程。另请注意,您可以查看 InsertionTime 队列消息的属性,并将其与处理器拾取它的时间进行比较,以查看它在队列中的停留时间。
是正确的,要确定为什么您会看到如此多的延迟,您需要找出代码中延迟的实际来源。如果您 post 特定的呼叫或缓慢的呼叫,我们可能会提供更好的建议。实际上,我们很大程度上只是在猜测。也就是说,假设延迟与 Azure 存储有关,我想添加一些推测:
- 它不会解释所有的延迟,但会检查您实际呼叫的是世界上的哪个地方。如果您的存储帐户在亚洲而您在加利福尼亚,那么如果您的代码 运行 位于更靠近数据中心的位置,您将看到更多的延迟。
- 特定于队列消息,请在放置消息时检查您的可见性超时是否很低(或为 0)。如果您的消息可见性超时为 30 秒,它实际上不会在 gets 上显示 30 秒。
- 确认您实际进行了多少次存储调用。如果您要创建队列、放置消息、轮询...等,对于小消息,它所花费的时间将远远超过所引用的 10 毫秒。如果您使用 Mike 的建议找出哪个速度慢,那将有助于您进一步调试。
我 运行 我的云服务在 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));
不,延迟根本不应该那么长。我肯定认为它与远程调试有更多关系。 IDE 和调试进程之间有很多信息。当像这样进行远程调试时,我可以看到它需要一段时间。我倾向于使用模拟器进行调试,除非绝对有必要从 运行ning 云环境进行调试。
话虽这么说,如果我是你,我会在你的日志记录中添加一些遥测数据,以查看你何时收到消息、处理消息需要多长时间等。然后当你 运行 在调试之外您将更好地了解实际处理过程。另请注意,您可以查看 InsertionTime 队列消息的属性,并将其与处理器拾取它的时间进行比较,以查看它在队列中的停留时间。
- 它不会解释所有的延迟,但会检查您实际呼叫的是世界上的哪个地方。如果您的存储帐户在亚洲而您在加利福尼亚,那么如果您的代码 运行 位于更靠近数据中心的位置,您将看到更多的延迟。
- 特定于队列消息,请在放置消息时检查您的可见性超时是否很低(或为 0)。如果您的消息可见性超时为 30 秒,它实际上不会在 gets 上显示 30 秒。
- 确认您实际进行了多少次存储调用。如果您要创建队列、放置消息、轮询...等,对于小消息,它所花费的时间将远远超过所引用的 10 毫秒。如果您使用 Mike 的建议找出哪个速度慢,那将有助于您进一步调试。