SQS即Simple Queue Service, 是一个分布式的消息队列服务,使用它非常简单,消息队列服务可以用来buffer burst, 使整个服务异步处理,不要求组件始终可用.
开发人员最初使用 Amazon SQS 时只需用到五个 API:
CreateQueue、SendMessage、ReceiveMessage、ChangeMessageVisibility 和 DeleteMessage。
Amazon SQS 会尽量保持消息顺序,但是由于队列的分布式特性,它无法保证消息的先后顺序。也正是因为舍弃了这些特性,才得以保持了SQS的可扩展性。
每个 Amazon SQS 队列都具有可配置的可见性超时(Default Visibility Timeout)。在从队列中读取消息后的指定时间内,该消息对其他读取者保持不可见。只要消息的处理时间短于可见性超时,每条消息都会得以处理并删除。如果处理消息的组件出现失败或不可用,可见性超时结束后该消息即对读取该队列的任何组件可见。这允许多个组件同时从同一队列中读取消息,每个组件负责处理不同的消息, 所以这个特性需要应用是幂等的。
在 Amazon SQS 返回消息给您时,该消息会保存在队列中,无论实际上您是否收到该消息。您要负责删除该消息;删除请求可确认您已处理了该消息。如果您不删除消息,Amazon SQS 将在另一个接收请求中递送该消息。
所以这样情况也是有可能发生的,由于分布式 Amazon SQS 系统中的某台服务器在执行删除时不可用,DeleteMessage 操作未能删除消息的所有副本。该消息副本可能会被再次递送,所以在设计应用程序时,要考虑此,以便再次收到已删除的消息时不会出现错误或不一致。
如果连续 30 天以上时间没有针对某个队列签发以下任何请求,SQS有可能删除该队列:SendMessage、ReceiveMessage、DeleteMessage、GetQueueAttributes 和 SetQueueAttributes。设计应用程序时应将此考虑在内。
原文:http://blog.csdn.net/hongchangfirst/article/details/25870323
作者:hongchangfirst
hongchangfirst的主页:http://blog.csdn.net/hongchangfirst