Amazon SQS(Simple Queue Service) 简介

SQS即Simple Queue Service, 是一个分布式的消息队列服务,使用它非常简单,消息队列服务可以用来buffer burst, 使整个服务异步处理,不要求组件始终可用.

开发人员最初使用 Amazon SQS 时只需用到五个 API:

CreateQueue、SendMessage、ReceiveMessage、ChangeMessageVisibility 和 DeleteMessage。

Amazon SQS 会尽量保持消息顺序,但是由于队列的分布式特性,SQS无法保证发送消息的先后顺序。每个 Amazon SQS 队列都具有可配置的可见性超时(Default Visibility Timeout)。在从队列中读取消息后的指定时间内,该消息对其他读取者保持不可见。只要消息的处理时间短于可见性超时,每条消息都会得以处理并删除。如果处理消息的组件出现失败或不可用,可见性超时结束后该消息即对读取该队列的任何组件可见。这允许您让多个组件同时从同一队列中读取消息,每个组件负责处理不同的消息。 


在 Amazon SQS 返回消息后,该消息会保存在队列中,称之为In Flight状态。删除请求可确认已处理了该消息。如果不删除消息,Amazon SQS 将在另一个接收请求中递送该消息。由于分布式 Amazon SQS 系统中的某台服务器在执行删除时不可用,DeleteMessage 操作未能删除消息的所有副本。该消息副本可能会被再次递送。所以应该在应用中进行相应的设计,以便在再次收到已删除的消息时不会出现错误或不一致。 


 如果连续 30 天以上时间没有针对某个队列签发以下任何请求,SQS有可能删除该队列:SendMessage、ReceiveMessage、DeleteMessage、GetQueueAttributes 和 SetQueueAttributes。设计应用程序时应将此考虑在内,这点比较恶心,觉得不应该有这样的性质。


短轮询和长轮询(区别是是否采样)

如果使用短轮询,则您从队列中检索消息时,Amazon SQS 会对服务器的一个子集(基于加权随机分布)进行采样,并且仅从这些服务器返回消息。这意味着,特定接收请求可能不会返回您的所有消息。或者,如果您的队列中有少量消息(少于 1 000 条),则意味着,特定请求可能不会返回您的任何消息,而后续请求则会返回您的任何消息。如果您继续从您的队列中检索消息,则 Amazon SQS 会对所有服务器进行采样,您会收到您的所有消息。

使用 Amazon SQS 进行长轮询的一个好处是:在没有消息可返回以答复发送到 Amazon SQS 队列的 ReceiveMessage 请求时,可以减少空响应数量。在发送响应之前,长轮询允许 Amazon SQS 产品等到队列中的消息可用为止。因此,如果连接没有超时,则对 ReceiveMessage 请求的响应将至少包含一条可用的消息(如果有),最多可包含 ReceiveMessage 调用中请求的最大消息数。

Receive Message Wait Time就是设置短轮询还是长轮询的,0代表短轮询,最大到20.

Amazon SQS 使用您需要熟悉的以下三个标识符:

队列 URL
消息 ID
接收句柄


每个队列飞行消息(Messages in Flight)的数量限制为 120,000。消息被队列接收后会处于飞行状态,但尚未从队列中删除。如果达到 120,000 的限制,将会收到一条来自 Amazon SQS 的“OverLimit”错误消息。为避免达到限制,应该在处理消息后将其从队列删除。


延迟队列允许将队列中新消息的传递操作推迟特定的秒数(Delivery Delay)。如果您创建延迟队列,则发送到该队列的任何消息在延迟期间对使用者都不可见。延迟队列类似于可见性超时,因为这两种功能都使得使用者在特定的时间段内无法获得消息。延迟队列和可见性超时之间的区别在于:对于延迟队列,消息在首次添加到队列时是隐藏的;而对于可见性超时,消息只有在从队列取回后才是隐藏的。


默认拒绝和显式拒绝的区别很重要,因为默认拒绝可以被允许覆盖,但是显式拒绝就不能。显示拒绝是并的关系,默认拒绝是或的关系.

原文:http://blog.csdn.net/hongchangfirst/article/details/25877059

作者:hongchangfirst

hongchangfirst的主页:http://blog.csdn.net/hongchangfirst


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Amazon SQS(简单队列服务)是一种完全托管的消息队列服务,可用于在分布式应用程序之间传递消息。AWS SDK for Java 提供了 Amazon SQS 的开发工具包,使您可以轻松地与 Amazon SQS 进行交互并发送和接收消息。下面是使用 AWS SDK for Java 与 Amazon SQS 交互的步骤: 1. 配置 AWS 访问凭证:在使用 AWS SDK for Java 之前,您需要配置 AWS 访问凭证。访问凭证包括 AWS 访问密钥 ID 和秘密访问密钥。您可以使用 AWS 身份和访问管理(IAM)创建和管理这些凭证。 2. 创建 Amazon SQS 客户端:使用 AWS SDK for Java 创建 AmazonSQSClient 对象,以便与 Amazon SQS 服务进行交互。 ``` AmazonSQS sqs = AmazonSQSClientBuilder.standard() .withCredentials(new AWSStaticCredentialsProvider(awsCredentials)) .withRegion(Regions.US_EAST_1) .build(); ``` 3. 创建队列:使用 AmazonSQS 对象的 createQueue() 方法创建一个新的队列,并将其命名为您选择的名称。 ``` CreateQueueRequest create_request = new CreateQueueRequest(queueName); String myQueueUrl = sqs.createQueue(create_request).getQueueUrl(); ``` 4. 发送消息:使用 AmazonSQS 对象的 sendMessage() 方法向队列发送消息。 ``` SendMessageRequest send_msg_request = new SendMessageRequest() .withQueueUrl(myQueueUrl) .withMessageBody("hello world") .withDelaySeconds(5); sqs.sendMessage(send_msg_request); ``` 5. 接收消息:使用 AmazonSQS 对象的 receiveMessage() 方法从队列中接收消息。 ``` ReceiveMessageRequest receive_request = new ReceiveMessageRequest() .withQueueUrl(myQueueUrl) .withWaitTimeSeconds(20); List<Message> messages = sqs.receiveMessage(receive_request).getMessages(); for (Message message : messages) { // 处理消息 } ``` 6. 删除消息:使用 AmazonSQS 对象的 deleteMessage() 方法从队列中删除已处理的消息。 ``` String messageReceiptHandle = message.getReceiptHandle(); sqs.deleteMessage(new DeleteMessageRequest(myQueueUrl, messageReceiptHandle)); ``` 这些是使用 AWS SDK for Java 与 Amazon SQS 进行交互的基本步骤。您可以根据需要进行调整,以满足您的特定应用程序需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值