All Products
Search
Document Center

Simple Message Queue (formerly MNS):Durasi pemrosesan pesan adaptif

Last Updated:Sep 18, 2026

Topik ini menjelaskan konsep, skenario, dan solusi untuk durasi pemrosesan pesan adaptif selama konsumsi pesan.

Konsep latar belakang

  • Visible: Pesan tersedia di Antrian. Konsumen mana pun dapat menerima dan memprosesnya. Konsumen adalah layanan atau aplikasi yang menerima dan memproses pesan.

  • Invisible: Setelah pesan diterima oleh satu konsumen, pesan tersebut menjadi invisible dan tidak dapat diterima oleh konsumen lain. Hal ini mencegah konsumen lain memproses pesan yang sama.

  • Visibility timeout period: Periode dari saat pesan diterima oleh konsumen (invisible bagi konsumen lain) hingga saat pesan tersebut dapat diterima kembali oleh konsumen lain (visible bagi konsumen lain).

Setelah pesan diterima oleh satu konsumen, pesan tersebut menjadi invisible dan tidak dapat diterima oleh konsumen lain. Status invisible ini bergantung pada visibility timeout period yang mencegah konsumen lain memproses pesan yang sama.

Untuk informasi lebih lanjut mengenai visibility timeout period, lihat Visibility Timeout.

Skenario

Simple Message Queue (formerly MNS) menetapkan visibility timeout period default untuk setiap pesan. Penghitungan mundur dimulai segera setelah konsumen menerima pesan. Jika konsumen gagal memproses pesan dalam visibility timeout period tersebut, konsumen lain dapat menerima dan memprosesnya. Timeout ini bermanfaat karena pesan harus secara eksplisit dihapus setelah diproses. Jika terjadi event abnormal, seperti crash proses konsumen, pesan tersebut tetap dapat diproses oleh konsumen lain.

Beberapa pengguna menetapkan visibility timeout period default yang panjang untuk Antrian guna memastikan pesan tidak dilepaskan sebelum konsumen selesai memprosesnya. Misalnya, visibility timeout period Antrian diatur menjadi 6 jam. Konsumen menerima dan memproses pesan M1. Jika proses kemudian crash atau mesin direstart, pesan M1 tidak dapat diterima dan diproses oleh konsumen lain setidaknya selama 6 jam. Menulis kode kustom untuk menangani kegagalan ini menambah kompleksitas program.

Pada skenario yang memerlukan performa real-time tinggi dan respons cepat untuk setiap pesan, konsumsi pesan harus memenuhi tujuan berikut:

  • Visibility timeout period Antrian pendek. Jika proses crash, konsumen lain dapat menerima dan memproses pesan yang belum diproses setelah visibility timeout period yang singkat berakhir.

  • Pesan tidak boleh mengalami timeout selama pemrosesan. Misalnya, jika konsumen membutuhkan waktu lebih dari 5 menit untuk memproses pesan, pesan tersebut tidak boleh mengalami timeout selama proses ini.

Solusi

SDK C# yang disediakan oleh Simple Message Queue (formerly MNS) dapat menangani skenario ini. Solusinya adalah secara berkala memeriksa apakah operasi ChangeVisibility diperlukan untuk pesan selama konsumen memprosesnya. Setelah pemrosesan selesai, konsumen tetap harus secara aktif menghapus pesan tersebut.

Untuk tautan unduhan SDK C#, lihat C++ SDK. Jika Anda mengalami masalah dengan demo, Anda dapat mengirimkan ticket.

Poin-poin berikut berlaku untuk program:

  • Sebelum menjalankan program, Anda harus menentukan accessId, accessKey, dan EndPoint.

  • Deskripsi variabel:

    Variabel

    Deskripsi

    MessageMinimalLife

    Durasi masa hidup minimum yang harus dimiliki pesan saat didaftarkan. Misalnya, jika pesan hanya memiliki sisa waktu timeout 0,1 detik saat didaftarkan, waktu tersebut tidak cukup untuk memperpanjang masa hidupnya dengan `ChangeVisibility`. Oleh karena itu, `MessageMinimalLife` memastikan pesan bertahan cukup lama agar `ChangeVisibility` dapat dipanggil. Atur nilai ini sesuai kebutuhan berdasarkan workload bisnis Anda.

    TimerInterval

    Interval untuk pengatur waktu internal di Manager. Pastikan pengatur waktu mulai sebelum sisa masa hidup pesan mencapai `MessageMinimalLife`. Interval yang singkat dapat diatur, tetapi hal ini menyebabkan pemeriksaan lebih sering.

    QueueMessageVisibilityTimeout

    Visibility timeout period default untuk pesan. Ini merupakan properti Antrian. Setiap kali `ChangeVisibility` dipanggil, visibility timeout period pesan diatur ulang ke `QueueMessageVisibilityTimeout`. Oleh karena itu, nilainya harus lebih besar daripada `TimerInterval` + `MessageMinimalLife` untuk memastikan pesan tidak mengalami timeout.

    MessageTimeout

    Periode timeout untuk pesan di dalam Manager. Misalnya, jika konsumen macet dan pesan tidak diproses setelah 5 jam (dengan asumsi 5 jam jauh lebih lama daripada waktu pemrosesan normal), Manager berhenti memanggil `ChangeVisibility` untuk pesan tersebut. Manager membiarkan waktu visibility pesan habis.

  • Deskripsi alur:

    • Setelah konsumen menerima pesan, konsumen pertama-tama mendaftarkan pesan tersebut, lalu memprosesnya, dan akhirnya memanggil metode deleteMessage milik Manager.

    • Saat pesan pertama kali didaftarkan, Manager menggunakan ThreadPool untuk menjadwalkan `ChangeVisibilityTask` guna memeriksa apakah operasi `ChangeVisibility` diperlukan. Manager juga menambahkan pesan ke daftar pesan internalnya.

    • Pengatur waktu internal Manager secara berkala menggunakan `Parallel` untuk menjalankan `ChangeVisibilityTask` yang memeriksa semua pesan dalam daftar pesan.

    • Operasi spesifik terkait Manager.ChangeMessageVisibility (ChangeVisibilityTask) ditunjukkan dalam bagan alir.

      Bagan alirnya sebagai berikut: