如何为 Azure 存储队列创建 "Health Check"

How can I create a "Health Check" for an Azure Storage Queue

因此,在使用 Azure 存储队列和 Web 作业开发应用程序时,我觉得我需要某种健康检查(通过 API)以确保我的 Azure 存储队列已针对每个环境正确配置生产。 我无权(直接)查看仪表板或 Kudu。

到目前为止,我的想法是创建一个 API 路由,returns 一个布尔值,告诉我如果队列不存在我是否能够创建它,并查看消息(即使不存在),例如:

    public async Task<bool> StorageQueueHealthCheck()
    {
        return await _queueManager.HealthCheck();
    }

和实施:

public async Task<bool> HealthCheck()
{
   try
  {
      CloudQueue queue = _queueClient.GetQueueReference(QueueNames.reportingQueue);
      queue.CreateIfNotExists();

      CloudQueueMessage peek = await queue.PeekMessageAsync();

      return true; // as long as we were able to peek at messages
   }
   catch (Exception ex)
   {
      return false;
   }
}

这种方法不好吗?当仪表板被抽象掉时,还有其他方法可以 "health check" 某些 Azure 功能吗?如果我绝对需要,我将能够查看 Kudu,但宁愿只使用 API 并通过 Swagger 点击它。

看起来不错。您也可以尝试 CloudQueue.FetchAttributeAsync(),因为当消息较大时有效载荷会较小。

这是一个很好的方法,请确保您确实有重试机制,这样您的健康检查就不会 return 间歇性故障时为 false。

第二种方法, 而不是只执行作业的 api 应该是一个控制台应用程序(webjob),它定期(1 分钟)执行此任务,并且根据一些逻辑可以说所有 'creates' 在最后 10 分钟内抛出错误发送电子邮件。这可以在所有环境中使用。