0
我寫了下面的代碼將幾條消息寫入SQS隊列並立即刪除它們。不過,我在輸出中看到,每條消息都會立即被刪除。不過,我看到消息數量非常隨機出現。我的意思是最初顯示1,然後再次顯示2,儘管刪除了一個更多。我已將可見性超時設置爲50秒,就像這個post中提到的那樣。我嘗試了這個程序的一部分。爲什麼SQS消息的寫入和刪除給出了錯誤的計數?
所以我的疑問是刪除消息立即發生。如果是的話,這將如何影響線程數。請參閱下面的代碼和輸出。
__author__ = 'Dhanapathi.Marepalli'
import boto.sqs
conn = boto.sqs.connect_to_region("us-east-1", aws_access_key_id="********",
aws_secret_access_key="************")
my_queue = conn.get_queue('SMSQueue')
def write_messages():
print("Writing messages.")
for i in range(1, 5):
new_message = Message()
message_body = str(random.randint(1111111111, 9999999999))
print("Message body is ", message_body)
new_message.set_body(message_body)
my_queue.write(new_message)
print("Message with message body {0} is written.".format(message_body))
print("Messages completed. Totally {0} messages written to Queue.".format(my_queue.count()))
def retrieve_messages():
while True:
counter = 0
rs = my_queue.get_messages()
for message in rs:
counter = 1
body = message.get_body()
print(current_thread().getName(), " Message is ", body)
print(current_thread().getName(), " Assume something happened in between.")
is_message_deleted = my_queue.delete_message(message)
if is_message_deleted:
print("{0}: Message with body {1} is deleted.".format(current_thread().getName(), body))
else:
print("{0}: Message with body {1} failed to delete.".format(current_thread().getName(), body))
print(current_thread().getName(), " thread count is ", my_queue.count())
if counter == 0:
print("Thread1:No messages inside the Queue.")
break
if __name__ == "__main__":
write_messages()
retrieve_messages()
已生成的輸出如下:預先
Writing messages.
Message body is 8111076750
Message with message body 8111076750 is written.
Message body is 4927934264
Message with message body 4927934264 is written.
Message body is 8511692382
Message with message body 8511692382 is written.
Message body is 9718698315
Message with message body 9718698315 is written.
Messages completed. Totally 4 messages written to Queue.
MainThread Message is 8111076750
MainThread Assume something happened in between.
MainThread: Message with body 8111076750 is deleted.
MainThread thread count is 3
MainThread Message is 4927934264
MainThread Assume something happened in between.
MainThread: Message with body 4927934264 is deleted.
MainThread thread count is 2
MainThread Message is 9718698315
MainThread Assume something happened in between.
MainThread: Message with body 9718698315 is deleted.
MainThread thread count is 1
MainThread Message is 8511692382
MainThread Assume something happened in between.
MainThread: Message with body 8511692382 is deleted.
MainThread thread count is 2
Thread1:No messages inside the Queue.
感謝。