gpt4 book ai didi

azure - 唤醒 Windows Azure 辅助角色

转载 作者:行者123 更新时间:2023-12-03 04:47:26 28 4
gpt4 key购买 nike

在 Windows Azure 辅助角色中处理“紧急”消息的最佳方式是什么?

我有一个启动的辅助角色,执行无限 while(true) 循环,并在此循环中:

  1. 读取队列中是否有消息
  2. 处理它们并删除它们
  3. 如果没有更多消息,则首先使用 Thread.Sleep(interval) 进入休眠状态,间隔较小(10 秒),然后逐渐将 sleep 间隔增加到 2 分钟
  4. 如果队列中出现消息,它将 sleep 间隔重置为 0 秒并返回第一步

问题是,如果工作人员 sleep 了 2 分钟并且队列中出现一条消息,我想唤醒工作人员而不是等待剩余时间。

有什么方法可以获取 worker 角色的实例并告诉它醒来吗?我想过在数据库中写一些东西,但后来我遇到了同样的问题,即使我有一个角色可以做到这一点,我将如何唤醒另一个已经休眠的工作角色?

最佳答案

这是使用 Windows Azure 存储队列的缺点之一。您必须在成本和延迟之间做出选择。如果您想优化成本,您将实现退避策略(就像您所做的那样),但这意味着这将对您的消息的处理时间产生影响(增加延迟)。

在您的情况下,评估 Windows Azure 服务总线队列可能会很有趣(了解差异 here )。使用服务总线队列的优点是它支持长轮询,这意味着它将保持与服务器的连接,直到消息到达(或超时)。

这是您通常编写的一些示例代码(您仍然需要管理异常等...):

QueueClient queueClient = factory.CreateQueueClient("myqueue");
while (true)
{
BrokeredMessage msg = queueClient.Receive(TimeSpan.FromSeconds(45));
if (msg != null)
{
var request = msg.GetBody<CreateOrderMessage>();
// Do something
msg.Complete();
}
}

这里有一些可以帮助您入门的好资源:

关于azure - 唤醒 Windows Azure 辅助角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11708204/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com