このトピックでは、Simple Message Queue (SMQ) SDK for Python を使用してキューのメッセージを管理するための前提条件とサンプルコードについて説明します。
前提条件
SMQ SDK for Python がインストールされていること。詳細については、Python 用 SDK のインストールをご参照ください。
エンドポイントとアクセス認証情報が構成されていること。詳細については、エンドポイントとアクセス認証情報の構成をご参照ください。
重要この例では、エンドポイントはエンドポイント構成に使用される sample.cfg ファイルから取得されます。AccessKey ペアとセキュリティトークンは環境変数から取得されます。
サンプルコードのダウンロード方法の詳細については、概要 トピックの「サンプルコード」セクションをご参照ください。
メッセージ本文のエンコード方式を選択する
メッセージ本文に特殊文字が含まれていない場合は、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 # base64 エンコードを使用するかどうかを設定 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: # The message body of receive_message is a byte string and the message body of receive_message_with_str_body is a string. 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)