我在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));
答案 0 :(得分:1)
不,延迟不应该那么长。我肯定认为它与远程调试有更多关系。 IDE和调试过程之间有很多信息。当我进行远程调试时,我可以看到它需要一段时间。除非绝对有必要从正在运行的云环境进行调试,否则我倾向于使用模拟器进行调试。
话虽如此,如果我是你,我会在您的日志记录中添加一些遥测信息,以查看您何时收到消息,处理消息的时间等等。然后,当您在调试之外运行时,您需要进行调查。我会更好地了解实际的处理过程。另请注意,您可以查看InsertionTime的队列消息的属性,并将其与处理器选择它的时间进行比较,以查看它在队列中的时间长度。
答案 1 :(得分:0)
MikeWo's answer是正确的,以确定为什么您会看到如此多的延迟,您需要找出代码中实际来自延迟的位置。如果你发布特定的电话或电话很慢,我们可能会提供更好的建议。事实上,我们在很大程度上只是猜测。话虽这么说,我想补充一些假设,假设延迟与Azure存储有关: