すべてのプロダクト
Search
ドキュメントセンター

Simple Message Queue (formerly MNS):SMQ SDK for Python を使用した Topic へのメッセージ送信

最終更新日:Mar 12, 2026

Simple Message Queue (旧称:MNS) の Topic に対して、生(Raw)および Base64 エンコード済みのメッセージを、SMQ SDK for Python を使用して送信します。

前提条件

開始する前に、以下の準備が完了していることを確認してください。

重要

本例では、エンドポイントは sample.cfg 構成ファイルから読み込まれます。AccessKey ペアおよびセキュリティトークンは、環境変数から読み込まれます。完全なサンプルコードをダウンロードするには、「概要」トピックの「サンプルコード」セクションをご参照ください。

メッセージ本文のエンコーディング方式

SMQ では、メッセージ本文のエンコーディングとして以下の 2 種類の方式をサポートしています。

方式クラス動作
生TopicMessageメッセージ本文をエンコーディングせずにそのまま送信します。
Base64Base64TopicMessage送信前にメッセージ本文を Base64 エンコードします。

エンコーディング方式の選択方法については、「メッセージ本文のエンコーディング方式の選択」をご参照ください。

メッセージの送信

publish_message.py ファイルを実行して、Topic へメッセージを送信します。

python publish_message.py MyTopic1

期待される出力結果:

==========Topic へのメッセージ送信==========
TopicName:MyTopic1
MessageCount:3

Publish Raw Message Succeed. MessageBody:I am test message 0. MessageID:4EA4CF419C3A7FC67FA95077****0001
Publish Raw Message Succeed. MessageBody:I am test message 1. MessageID:4EA4CF419C3A7FC67FA95077****0002
Publish Raw Message Succeed. MessageBody:I am test message 2. MessageID:4EA4CF419C3A7FC67FA95077****0003
Publish Base64 Encoded Message Succeed. MessageBody:I am test message 0. MessageID:4EA4CF419C3A7FC67FA95077****0004
Publish Base64 Encoded Message Succeed. MessageBody:I am test message 1. MessageID:4EA4CF419C3A7FC67FA95077****0005
Publish Base64 Encoded Message Succeed. MessageBody:I am test message 2. MessageID:4EA4CF419C3A7FC67FA95077****0006

このスクリプトでは、MyTopic1 に対して生(Raw)メッセージを 3 件、Base64 エンコード済みメッセージを 3 件、合計 6 件送信します。

コードの解説

publish_message.py のコアコードでは、以下の 3 つのステップを実行します:アカウントの初期化、生(Raw)メッセージの送信、Base64 エンコード済みメッセージの送信。

ステップ 1:アカウントの初期化と Topic の取得

エンドポイントおよび認証情報を用いて Account オブジェクトを作成し、対象 Topic の参照を取得します。

my_account = Account(endpoint, accid, acckey, token)
topic_name = sys.argv[1] if len(sys.argv) > 1 else "MySampleTopic"
my_topic = my_account.get_topic(topic_name)
パラメーター説明
endpointSMQ サービスのエンドポイント。この値は sample.cfg ファイルからロードされます。
accidAccessKey ID。この値は環境変数からロードされます。
acckeyAccessKey Secret。この値は環境変数からロードされます。
tokenセキュリティトークン。この値は環境変数からロードされます。
topic_name対象 Topic の名前。コマンドライン引数が指定されていない場合は、デフォルトで MySampleTopic が使用されます。

ステップ 2:生(Raw)メッセージの送信

TopicMessage を使用して、エンコーディングを行わずにメッセージを送信します。

msg_count = 3

for i in range(msg_count):
    try:
        msg_body = u"I am test message %s." % i
        msg = TopicMessage(msg_body)
        re_msg = my_topic.publish_message(msg)
        print("Publish Raw Message Succeed. MessageBody:%s MessageID:%s" % (msg_body, re_msg.message_id))
    except MNSExceptionBase as e:
        if e.type == "TopicNotExist":
            print("Topic not exist, please create it.")
            sys.exit(1)
        print("Publish Raw Message Fail. Exception:%s" % e)
  • TopicMessage(msg_body) は、メッセージ本文を生(Raw)形式(エンコーディングなし)でラップします。

  • my_topic.publish_message(msg) は、メッセージを Topic に送信し、message_id を含む応答を返します。

  • Topic が存在しない場合、SDK は MNSExceptionBase を発生させ、その e.type 属性が "TopicNotExist" に設定されます。

ステップ 3:Base64 エンコード済みメッセージの送信

Base64TopicMessage を使用して、送信前にメッセージ本文を Base64 エンコードします。

for i in range(msg_count):
    try:
        msg_body = u"I am test message %s." % i
        msg = Base64TopicMessage(msg_body)
        re_msg = my_topic.publish_message(msg)
        print("Publish Base64 Encoded Message Succeed. MessageBody:%s MessageID:%s" % (msg_body, re_msg.message_id))
    except MNSExceptionBase as e:
        if e.type == "TopicNotExist":
            print("Topic not exist, please create it.")
            sys.exit(1)
        print("Publish Base64 Encoded Message Fail. Exception:%s" % e)

ステップ 2 との唯一の違いは、使用するメッセージクラスです。Base64TopicMessage は、送信前にメッセージ本文を自動的に Base64 エンコードします。

エラー処理

コードでは、MNSExceptionBase をキャッチし、e.type 属性をチェックしてエラーの種類を特定します。

エラー種別原因対応方法
TopicNotExist指定された Topic が存在しません。まず Topic を作成し、その後再試行してください。
その他の種別ネットワーク障害、認証失敗、その他のサービス障害など例外メッセージを確認して、詳細を確認してください。

次のステップ