All Products
Search
Document Center

Simple Message Queue (formerly MNS):Publikasikan pesan ke topik menggunakan SMQ SDK untuk Python

Last Updated:Mar 12, 2026

Publikasikan pesan dalam bentuk raw dan Base64-encoded ke topik Simple Message Queue (formerly MNS) menggunakan SMQ SDK untuk Python.

Prasyarat

Sebelum memulai, pastikan Anda telah:

Penting

Endpoint dalam contoh ini dimuat dari file konfigurasi sample.cfg. Pasangan AccessKey dan token keamanan dimuat dari variabel lingkungan. Untuk mengunduh kode contoh lengkap, lihat bagian "Sample code" dalam topik Overview.

Metode pengkodean isi pesan

SMQ mendukung dua metode pengkodean isi pesan:

MetodeKelasPerilaku
RawTopicMessageMengirim isi pesan apa adanya tanpa pengkodean
Base64Base64TopicMessageMelakukan encode Base64 pada isi pesan sebelum dikirim

Untuk panduan memilih metode encoding, lihat Memilih Metode Encoding untuk Isi Paket.

Publikasikan pesan

Jalankan file publish_message.py untuk mempublikasikan pesan ke topik:

python publish_message.py MyTopic1

Output yang diharapkan:

==========Publish Message To 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

Skrip tersebut mempublikasikan tiga pesan raw dan tiga pesan Base64-encoded ke MyTopic1, sehingga totalnya ada enam pesan.

Penjelasan kode

Kode inti dalam publish_message.py melakukan tiga langkah: inisialisasi akun, publikasi pesan raw, dan publikasi pesan Base64-encoded.

Langkah 1: Inisialisasi akun dan ambil referensi topik

Buat objek Account dengan endpoint dan kredensial Anda, lalu ambil referensi ke topik tujuan:

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)
ParameterDeskripsi
endpointTitik akhir layanan SMQ, dimuat dari file sample.cfg
accidID AccessKey, dimuat dari variabel lingkungan
acckeyAccessKey Secret, dimuat dari variabel lingkungan
tokenToken keamanan, dimuat dari variabel lingkungan
topic_nameNama topik tujuan. Nilai default-nya adalah MySampleTopic jika tidak ada argumen baris perintah yang diberikan

Langkah 2: Publikasikan pesan raw

Gunakan TopicMessage untuk mempublikasikan pesan tanpa pengkodean:

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) membungkus isi pesan sebagai pesan raw (tidak di-encode).

  • my_topic.publish_message(msg) mempublikasikan pesan ke topik dan mengembalikan respons yang berisi message_id.

  • Jika topik tidak ada, SDK akan memunculkan MNSExceptionBase dengan atribut e.type bernilai "TopicNotExist".

Langkah 3: Publikasikan pesan Base64-encoded

Gunakan Base64TopicMessage untuk melakukan encode Base64 pada isi pesan sebelum dipublikasikan:

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)

Satu-satunya perbedaan dari Langkah 2 terletak pada kelas pesan: Base64TopicMessage secara otomatis melakukan encode Base64 pada isi pesan sebelum dipublikasikan.

Penanganan error

Kode tersebut menangkap MNSExceptionBase dan memeriksa atribut e.type untuk mengidentifikasi jenis error:

Jenis errorPenyebabTindakan
TopicNotExistTopik yang ditentukan tidak adaBuat topik terlebih dahulu, lalu coba lagi
Jenis lainnyaError jaringan, kegagalan autentikasi, atau error layanan lainnyaPeriksa pesan exception untuk detail lebih lanjut

Langkah selanjutnya