All Products
Search
Document Center

Simple Message Queue (formerly MNS):Kelola pesan antrian dengan SMQ SDK untuk Python

Last Updated:Feb 28, 2026

Kirim, terima, dan hapus pesan dalam antrian Simple Message Queue (formerly MNS) menggunakan SDK Python.

Prasyarat

Sebelum memulai, pastikan Anda telah:

Penting

Pada contoh berikut, endpoint dimuat dari file konfigurasi sample.cfg, sedangkan pasangan Kunci Akses dan token keamanan dimuat dari variabel lingkungan. Untuk mengunduh kode contoh lengkap, lihat bagian "Sample code" di Overview.

Kelas SDK

SMQ Python SDK menggunakan tiga kelas inti untuk berinteraksi dengan sumber daya antrian:

ClassPeran
AccountTitik masuk. Mewakili koneksi terautentikasi ke SMQ menggunakan endpoint dan kredensial
QueueDibuat dari Account. Menyediakan metode untuk mengirim, menerima, dan menghapus pesan
MessageMewakili satu pesan dengan isi pesan, ID pesan, dan receipt handle

Inisialisasi umum:

from mns.account import Account

my_account = Account(endpoint, accid, acckey, token)
my_queue = my_account.get_queue("<queue-name>")

Pilih encoding isi pesan

Jika isi pesan tidak mengandung karakter khusus, lewati encoding Base64 agar lebih mudah dibaca dan mengurangi overhead.

  • Kirim tanpa Base64: Panggil message.setMessageBodyAsRawString untuk mengatur isi pesan sebagai string mentah.

  • Terima tanpa Base64: Panggil message.getMessageBodyAsRawString untuk mengambil isi pesan sebagai string mentah.

Secara default, SDK menggunakan encoding Base64. Untuk menonaktifkannya di sisi penerima, panggil my_queue.set_encoding(False).

Kirim pesan

Skrip send_message.py mengirim pesan ke antrian yang ditentukan.

Jalankan skrip

python send_message.py <queue-name>

Ganti <queue-name> dengan nama antrian Anda. Jika tidak ditentukan, skrip akan menggunakan nilai default MySampleQueue.

Output yang diharapkan

==========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

Penjelasan kode

1. Inisialisasi akun dan ambil antrian.

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("%sKirim Pesan ke Antrian%s\nNamaAntrian:%s\nJumlahPesan:%s\n" % (10*"=", 10*"=", queue_name, msg_count))
for i in range(msg_count):
    try:
        msg_body = u"Ini adalah pesan uji %s." % i
        msg = Message(msg_body)
        re_msg = my_queue.send_message(msg)
        print("Pesan Berhasil Dikirim!  IsiPesan:%s MessageID:%s ReceiptHandle:%s" % (msg_body, re_msg.message_id, re_msg.receipt_handle))
    except MNSExceptionBase as e:
        if e.type == "QueueNotExist":
            print("Antrian tidak ada, harap buat antrian sebelum mengirim pesan.")
            sys.exit(0)
        print("Pesan Gagal Dikirim!  Eksepsi:%s\n" % e)

2. Buat dan kirim pesan.

msg_body = u"I am test message 0."
msg = Message(msg_body)
re_msg = my_queue.send_message(msg)

Objek re_msg yang dikembalikan berisi atribut message_id, yaitu pengenal unik yang diberikan oleh SMQ.

3. Tangani error.

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)

Jika antrian tidak ada, SDK akan memunculkan MNSExceptionBase dengan e.type bernilai QueueNotExist.

Kode inti lengkap

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)

Terima dan hapus pesan

Skrip recv_and_del_message.py menerima pesan satu per satu menggunakan long polling, lalu menghapus setiap pesan setelah diproses.

Jalankan skrip

python recv_and_del_message.py <queue-name>

Ganti <queue-name> dengan nama antrian Anda. Jika tidak ditentukan, skrip akan menggunakan nilai default MySampleQueue.

Untuk menonaktifkan decoding Base64, berikan false sebagai argumen kedua:

python recv_and_del_message.py <queue-name> false

Output yang diharapkan

==========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!

Penjelasan kode

1. Inisialisasi akun, ambil antrian, dan konfigurasi encoding.

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)

Metode set_encoding mengontrol apakah SDK menerapkan decoding Base64 pada isi pesan. Berikan False untuk menerima isi pesan sebagai string mentah.

2. Terima pesan dengan long polling.

wait_seconds = 3
recv_msg = my_queue.receive_message_with_str_body(wait_seconds)
ParameterDeskripsi
wait_secondsDurasi long polling dalam detik. Permintaan akan diblokir hingga pesan tiba atau timeout berakhir

SDK menyediakan dua metode penerimaan:

MetodeMengembalikan
receive_message(wait_seconds)Isi pesan sebagai byte string
receive_message_with_str_body(wait_seconds)Isi pesan sebagai string

Pesan yang diterima memiliki atribut-atribut berikut:

AtributDeskripsi
recv_msg.receipt_handleHandle yang diperlukan untuk menghapus pesan
recv_msg.message_bodyKonten pesan
recv_msg.message_idPengenal unik pesan

3. Hapus pesan setelah diproses.

my_queue.delete_message(recv_msg.receipt_handle)

Berikan receipt_handle dari pesan yang diterima. Jika pesan tidak dihapus sebelum timeout visibilitas berakhir, pesan tersebut akan tersedia kembali untuk konsumen lain.

4. Tangani error.

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)
Jenis errorMakna
QueueNotExistAntrian yang ditentukan tidak ada. Buat terlebih dahulu sebelum mengirim atau menerima pesan
MessageNotExistTidak ada pesan yang tersedia di antrian. Waktu tunggu long polling telah habis

Kode inti lengkap

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 returns a byte string body.
        # receive_message_with_str_body returns a string body.
        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)

Referensi