【问题标题】:How to confirm delivery of Message to Amazon SQS Queue?如何确认消息传递到 Amazon SQS 队列?
【发布时间】:2017-02-03 13:52:25
【问题描述】:

我正在使用 AWS sdk 开发基于 SQS 的队列 pub-sub。

在非常基本的原型中,我将消息同时推送到我已经创建的队列中。但是,我如何确定我的消息被推送到队列中?

什么是推送的消息在这个过程中不会因为任何原因而失败的保证?

Amazon API 查询为 ResponseMetadata 提供了与该特定发送消息请求相关联的 RequestID。是否足以确定将消息推送到队列?

String requestId = sqs.sendMessage(request).getSdkResponseMetadata().getRequestId();

亚马逊 sendmessage 请求没有给出带有 Http Code 的响应正文吗?

【问题讨论】:

    标签: java amazon-web-services response message-queue amazon-sqs


    【解决方案1】:

    AWS SendMessageRequest 确实会为每个正在发送的推送消息请求发送状态代码。

    int statusCode =     sendMessageResult.getSdkHttpMetadata().getHttpStatusCode();
    

    但是批量推送消息会失败,因为我们不知道批次中哪些消息没有推送成功。

    【讨论】:

    • 所以你使用SendMessageBatchResult 类。迈克尔回答了你最初的问题。
    【解决方案2】:

    SendMessageResult。有一个getMessageId() 应该为您提供由SQS 分配给消息的消息ID。如果你明白了,那么消息肯定已经传递了。消息的消费者在收到消息时可以访问这个相同的 ID,该 ID 为designed to be globally unique for an extended period of time

    【讨论】:

    • 那么如果消息没有成功入队,getMessageId()会返回什么?我应该只检查 messageId 是否为空吗?
    • @as2d3 什么都没有。 message-id 由服务生成并从服务返回(不是由 SDK 在本地),因此如果消息未入队,则它不能有值。发送消息失败应该从上游某个地方抛出异常。
    • 如果getMessageId() != null ... 那么发送成功了?
    • 奇怪的是虽然我得到了一个messageid,但是当我检查队列时有时会显示0条消息。消息似乎永远不会到达。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 2016-12-07
    • 2019-12-31
    • 2018-08-29
    相关资源
    最近更新 更多