sample/queue/recv_and_del_message.py (34 lines of code) (raw):
#!/usr/bin/env python
# coding=utf8
import os
import sys
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)) + "/../..")
from sample_config import MNSSampleConfig
from mns.account import Account
# 从sample.cfg中读取基本配置信息
# WARNING: Please do not hard code your accessId and accesskey in next line.(more information: https://yq.aliyun.com/articles/55947)
accessKeyId, accessKeySecret, endpoint, token = MNSSampleConfig.load_config()
# 初始化 my_account, my_queue
my_account = Account(endpoint, accessKeyId, accessKeySecret, token)
queue_name = sys.argv[1] if len(sys.argv) > 1 else "MySampleQueue"
base64 = False if len(sys.argv) > 2 and sys.argv[2].lower() == "false" else True
my_queue = my_account.get_queue(queue_name)
my_queue.set_encoding(base64)
# 循环读取删除消息直到队列空
# receive message请求使用long polling方式,通过wait_seconds指定长轮询时间为3秒
# long polling 解析:
# 当队列中有消息时,请求立即返回;
# 当队列中没有消息时,请求在MNS服务器端挂3秒钟,在这期间,有消息写入队列,请求会立即返回消息,3秒后,请求返回队列没有消息;
wait_seconds = 3
print("%sReceive And Delete Message From Queue%s\nQueueName: %s\nWaitSeconds: %s\n"
% (10 * "=", 10 * "=", queue_name, wait_seconds))
while True:
# 读取消息
try:
# receive_message 返回字节串,receive_message_with_str_body 返回字符串
# recv_msg = my_queue.receive_message(wait_seconds)
recv_msg = my_queue.receive_message_with_str_body(wait_seconds)
print("Receive Message Succeed! ReceiptHandle: %s MessageBody: %s MessageID: %s"
% (recv_msg.receipt_handle, recv_msg.message_body, recv_msg.message_id))
except Exception as e:
# except MNSServerException as e:
if hasattr(e, 'type'):
if e.type == u"QueueNotExist":
print("Queue not exist, please create queue before receive message.")
sys.exit(0)
elif e.type == u"MessageNotExist":
print("Queue is empty!")
sys.exit(0)
print("Receive Message Fail! Exception: %s\n" % e)
continue
# 删除消息
try:
my_queue.delete_message(recv_msg.receipt_handle)
print("Delete Message Succeed! ReceiptHandle: %s" % recv_msg.receipt_handle)
except Exception as e:
print("Delete Message Fail! Exception: %s\n" % e)