如何判断boto.sqs.Queue.write()是否成功?

时间:2014-01-13 04:13:31

标签: python amazon-web-services boto amazon-sqs

我能找到的这个方法的所有文档都说Queue.write返回True或False,具体取决于写入是否成功,但这与现实不符。

文档说:

  

如果一切顺利,write方法返回True。如果写   没有成功它会返回一个假(意味着SQS只是选择   不要出于某种原因写消息)或者如果有的话就是例外   请求的某种问题。

但实际上该方法只返回传入的消息。以下是来自https://github.com/boto/boto/blob/develop/boto/sqs/queue.py的相关源代码:

def write(self, message, delay_seconds=None):
    """
    Add a single message to the queue.
    :type message: Message
    :param message: The message to be written to the queue

    :rtype: :class:`boto.sqs.message.Message`
    :return: The :class:`boto.sqs.message.Message` object that was written.
    """
    new_msg = self.connection.send_message(self,
                                           message.get_body_encoded(),
                                           delay_seconds)
    message.id = new_msg.id
    message.md5 = new_msg.md5
    return message

我的问题是:我如何确定写作是否成功?

1 个答案:

答案 0 :(得分:5)

您提供的文档引用来自SQS教程。 SQS API docs正确描述了当前的返回值。 SQS教程已经过时,需要更正。我创建了一个issue来跟踪此内容。

如果写入因任何原因失败,服务将返回HTTP错误代码,这反过来会导致boto引发SQSError异常。如果没有引发异常,则写入成功。