如何为 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 分钟内抛出错误发送电子邮件。这可以在所有环境中使用。
因此,在使用 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 分钟内抛出错误发送电子邮件。这可以在所有环境中使用。