如何处理Azure辅助角色中的非瞬态异常

时间:2016-07-06 12:44:36

标签: azure azure-worker-roles azureservicebus azure-redis-cache redis-cache

我们有两个天蓝色的工人角色--A和B.

  • A是Quartz调度程序,每分钟运行一次作业。
  • 它从' Redis缓存中读取一些ID'每分钟都为这些ID执行工作。
  • ' A'将其输出发布到服务总线队列 由工作人员角色' B'订阅。
  • ' B' worker角色从中读取值 排队并对它们执行更多操作。
  • 两个工人角色都有 在启动时构建缓存。

现在,有关Azure组件故障的几个问题:

  • 如果Redis缓存出现故障,我们该怎么办呢?我们需要停止执行直到它再次启动,然后我们需要再次构建缓存。 ' B'工作者角色应该停止从服务总线拉出消息,直到Redis再次出现。

  • 如何处理工作人员角色中的服务总线故障' B'

2 个答案:

答案 0 :(得分:0)

您无需停止任何工作人员角色。

工作者角色A应该能够适应Redis缓存中的问题,这意味着您的代码应该通过重试或吞下异常来处理Redis(或网络异常)抛出的任何异常。

工作人员角色B应不断从服务总线中提取消息。如果辅助角色A不发布数据,则辅助角色B应处理空结果。

在Redis / Azure故障上停止服务将需要您处理更复杂的情况 - 例如:自动检测Redis是否再次启动并自动启动您的服务。

答案 1 :(得分:0)

一种可能的解决方案是在从服务总线或缓存中提取之前配置工作人员检查的外部运行状况服务。如果健康服务部门说缓存或服务总线已关闭,那么您的工作人员根本不会尝试处理任何事情。