Windows Azure 队列使用指南
1. Windows Azure 队列概述
在使用 Windows Azure 队列时,工作项在出现故障的情况下可能会花费很长时间。这需要我们进行一些实验,找到适合自己的参数设置。在实际应用中,采用两阶段模型删除消息,能确保每个消息至少被处理一次。不过,当消息在崩溃的接收器上重新传递时,会出现一个有趣的问题——毒消息。
1.1 毒消息问题
毒消息是指那些会导致代码出现错误并引发崩溃的消息。由于这些消息不会被删除,它们会不断在队列中重复出现,反复导致崩溃。而且,由于消息在短时间内是不可见的,这种影响可能在很长一段时间内都不会被注意到,从而给服务的可用性带来严重问题。
为了防范毒消息,我们需要做好安全基础工作,确保工作进程能够抵御不良输入。另外,毒消息在其生存时间(TTL)结束后会自动离开系统。因此,缩短 TTL 可以减少不良消息的影响,但同时也需要权衡接收方处理消息速度不够快时丢失消息的风险。
1.2 使用队列的注意事项
使用 Windows Azure 队列时,人们常常会因为期望它与 MSMQ、SQL Service Broker 等常见消息系统一样,而陷入一些误区。实际上,在处理高度可扩展和可靠的分布式服务时,有些方面在云端的工作方式是不同的。以下是一些常见的注意点:
- 消息可能重复(幂等性) :处理队列消息时,代码应具有幂等性,即能够多次接收相同的消息,且结果保持一致。实现幂等性的方法有多种,例如对于视频转码等操作,可以多次执行相同的工作;而对于金融交易等操作,则需要记录操作状态,在执行操作前检查该状态。
-