我想检测我的 Azure 角色实例已崩溃的事实。在我的情况下检测意味着我的角色的另一个实例收到有关崩溃的通知。请查看我在下面解释的想法或提出其他解决方案。
我提出的想法利用了 Azure 队列中的项目处理时间有限这一事实。
- 配置 Azure 队列。该角色的所有实例都侦听此队列。
- 将角色实例配置为具有内部端点
- 当实例 A 启动时,它会向队列发布一条消息。该消息包含实例 A 的 id、A 的内部端点的 IP、该消息应转发回 A 的标记。
- 消息最有可能在另一个实例 B 上结束。B 将通过内部端点将 MessageId 和 PopReceipt 转发给 A。实例 A 使用此 ctr http://msdn.microsoft.com/en-us/library/dn451949.aspx创建 CloudQueueMessage 对象。
- 实例 A 开始无限更新接收消息的可见性超时。从 Azure 队列的角度来看,此消息将被处理很长时间。在第一次更新中,A 删除了“转发此消息”标记。
- 如果实例 A 崩溃,它将停止延长处理时间。该消息将很快对其他实例自动可见。
- 实例 C 获取消息并了解崩溃的 A:消息包含实例 A 的 ID,并且没有“转发此消息”标记。
- 如果实例 A 正常停止,它会将其队列消息标记为已处理。