本文介紹使用Python SDK發送SMQ訊息時的準備工作及範例程式碼。
前提條件
- 重要
本文代碼中提及的endpoint從配置訪問網域名稱時的sample.cfg檔案中讀取,accid、acckey和 token從環境變數中讀取。
範例程式碼下載,請參見範例程式碼。
訊息體編碼選擇
當訊息體無特殊字元時,建議您不使用Base64編碼。
發送訊息時使用
message.setMessageBodyAsRawString方法設定訊息體。接收訊息時使用
message.getMessageBodyAsRawString方法擷取訊息體。
發送訊息
運行
send_message.py,命令如下:python send_message.py MyQueue1返回結果如下:
==========Send Message To Queue========== QueueName:MyQueue1 MessageCount:3 Send Message Succeed! MessageBody:I am test message 0. MessageID:3EBE662B52BC99BC-1-154BD99CCA7-200000001 Send Message Succeed! MessageBody:I am test message 1. MessageID:64B92941FC57837F-2-154BD99CCCE-200000001 Send Message Succeed! MessageBody:I am test message 2. MessageID:3EBE662B52BC99BC-1-154BD99CCF0-200000002核心代碼:
my_account = Account(endpoint, accid, acckey, token) queue_name = sys.argv[1] if len(sys.argv) > 1 else "MySampleQueue" my_queue = my_account.get_queue(queue_name) msg_count = 3 print("%sSend Message To Queue%s\nQueueName:%s\nMessageCount:%s\n" % (10*"=", 10*"=", queue_name, msg_count)) for i in range(msg_count): try: msg_body = u"I am test message %s." % i msg = Message(msg_body) re_msg = my_queue.send_message(msg) print("Send Message Succeed! MessageBody:%s MessageID:%s ReceiptHandle:%s" % (msg_body, re_msg.message_id, re_msg.receipt_handle)) except MNSExceptionBase as e: if e.type == "QueueNotExist": print("Queue not exist, please create queue before send message.") sys.exit(0) print("Send Message Fail! Exception:%s\n" % e)
接收和刪除訊息
運行
recv_and_del_message.py,命令如下:python recv_and_del_message.py MyQueue1返回結果如下:
==========Receive And Delete Message From Queue========== QueueName:MyQueue1 WaitSeconds:3 Receive Message Succeed! ReceiptHandle:1-ODU4OTkzNDU5My0xNDYzNDcwNDU4LTEtOA== MessageBody:I am test message 0. MessageID:3EBE662B52BC99BC-1-154BD99CCA7-200000001 Delete Message Succeed! ReceiptHandle:1-ODU4OTkzNDU5My0xNDYzNDcwNDU4LTEtOA== Receive Message Succeed! ReceiptHandle:1-ODU4OTkzNDU5NC0xNDYzNDcwNDU4LTEtOA== MessageBody:I am test message 2. MessageID:3EBE662B52BC99BC-1-154BD99CCF0-200000002 Delete Message Succeed! ReceiptHandle:1-ODU4OTkzNDU5NC0xNDYzNDcwNDU4LTEtOA== Receive Message Succeed! ReceiptHandle:1-ODU4OTkzNDU5My0xNDYzNDcwNDU4LTItOA== MessageBody:I am test message 1. MessageID:64B92941FC57837F-2-154BD99CCCE-200000001 Delete Message Succeed! ReceiptHandle:1-ODU4OTkzNDU5My0xNDYzNDcwNDU4LTItOA== Queue is empty!核心代碼:
my_account = Account(endpoint, accid, acckey, 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) 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: 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)