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:
Menginstal SMQ SDK untuk Python. Untuk informasi selengkapnya, lihat Install SDK for Python.
Mengonfigurasi endpoint dan kredensial akses. Untuk informasi selengkapnya, lihat Configure endpoints and access credentials.
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:
| Metode | Kelas | Perilaku |
|---|---|---|
| Raw | TopicMessage | Mengirim isi pesan apa adanya tanpa pengkodean |
| Base64 | Base64TopicMessage | Melakukan 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 MyTopic1Output 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****0006Skrip 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)| Parameter | Deskripsi |
|---|---|
endpoint | Titik akhir layanan SMQ, dimuat dari file sample.cfg |
accid | ID AccessKey, dimuat dari variabel lingkungan |
acckey | AccessKey Secret, dimuat dari variabel lingkungan |
token | Token keamanan, dimuat dari variabel lingkungan |
topic_name | Nama 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 berisimessage_id.Jika topik tidak ada, SDK akan memunculkan
MNSExceptionBasedengan atribute.typebernilai"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 error | Penyebab | Tindakan |
|---|---|---|
TopicNotExist | Topik yang ditentukan tidak ada | Buat topik terlebih dahulu, lalu coba lagi |
| Jenis lainnya | Error jaringan, kegagalan autentikasi, atau error layanan lainnya | Periksa pesan exception untuk detail lebih lanjut |
Langkah selanjutnya
Pelajari tentang metode pengkodean isi pesan.
Unduh kode contoh lengkap dari bagian "Sample code" dalam topik Overview.