为了处理每8小时运行一次的清理作业,目前我们已经实现了:
以这样一种方式实现客户端,即它将持续轮询并在收到消息时进行处理。客户端的示例实现是:
while (!CancellationToken.Value.IsCancellationRequested)
{
var message = await client.GetMessageAsync();
if (message != null)
{
// process the message
}
}
但问题是我们正在等待,即使我们知道我们只会在8小时后收到消息,并且根据文档,每次尝试从队列中读取消息都会产生费用。
如何优化这一点,以便在每个可配置的时间而不是连续循环中动态生成侦听器?
答案 0 :(得分:1)
您没有提及您的客户端是如何部署的,因此我希望以下策略之一可以帮助您进行优化。 如果您将客户端部署为云资源:您可以使用Azure自动化服务来安排云资源的启动/停止,例如:在消息出现在队列中之前启动云服务,并在完成后触发关闭。
如果您的客户端部署在本地:您当然可以使用Thread.Sleep来减少命中数
还要考虑Azure Service Bus,它允许您订阅消息/主题。