全部产品
Search
文档中心

Simple Message Queue (formerly MNS):Mengelola waktu tunggu visibilitas pesan

更新时间:Jul 02, 2025

Topik ini menjelaskan istilah, skenario, dan solusi terkait pengelolaan waktu tunggu visibilitas pesan ketika dikonsumsi oleh pelanggan.

Istilah

  • Terlihat: Pesan yang dapat dibaca dan diterima oleh banyak konsumen. Konsumen adalah layanan atau aplikasi yang menerima dan memproses pesan.

  • Tidak Terlihat: Setelah pesan diterima oleh satu konsumen, pesan tersebut menjadi tidak terlihat dan tidak dapat diterima oleh konsumen lainnya. Hal ini mencegah pemrosesan ulang pesan yang sama oleh konsumen lain.

  • Periode Waktu Tunggu Visibilitas: Rentang waktu dari saat pesan diterima oleh konsumen (tidak terlihat untuk konsumen lain) hingga saat pesan tersebut kembali tersedia untuk konsumen lain (terlihat).

Setelah pesan diterima oleh satu konsumen, pesan tersebut menjadi tidak terlihat dan tidak dapat diterima oleh konsumen lain. Status tidak terlihat bergantung pada periode waktu tunggu visibilitas yang mencegah konsumen lain memproses pesan yang sama.

Untuk informasi lebih lanjut tentang periode waktu tunggu visibilitas, lihat Periode Waktu Tunggu Visibilitas.

Skenario

Simple Message Queue (SMQ, sebelumnya MNS) menyediakan parameter VisibilityTimeout untuk setiap pesan. Setelah konsumen menerima pesan, SMQ mulai menghitung waktu tunggu visibilitas. Jika konsumen gagal menyelesaikan pemrosesan pesan dalam periode waktu tunggu yang ditentukan, pesan tersebut dapat diterima dan diproses oleh konsumen lain. Jika Anda menentukan parameter VisibilityTimeout untuk sebuah pesan dan konsumen gagal memproses pesan tersebut, pesan tidak akan dihapus dan dapat diproses oleh konsumen lain.

Anda dapat menetapkan nilai besar untuk parameter VisibilityTimeout untuk memastikan bahwa konsumen memiliki cukup waktu untuk memproses pesan. Misalnya, jika nilai parameter VisibilityTimeout untuk antrian diatur ke 6 jam dan seorang konsumen menerima pesan M1 tetapi gagal memprosesnya karena proses gagal atau host di-restart, pesan M1 tidak dapat diterima atau diproses oleh konsumen lain sampai enam jam kemudian. Anda dapat menulis kode untuk memperpendek waktu, tetapi hal ini akan membuat proses lebih rumit.

Dalam skenario tertentu, Anda perlu memproses pesan segera setelah diterima. Misalkan Anda memiliki persyaratan berikut:

  • Nilai parameter VisibilityTimeout kecil, misalnya, 5 menit. Jika konsumen gagal, pesan yang belum diproses oleh konsumen dapat diterima dan diproses oleh konsumen lain dalam lima menit.

  • Ketika konsumen memproses pesan, koneksi harus dipertahankan karena proses mungkin memakan waktu lebih dari lima menit.

Solusi

Simple Message Queue (SMQ, sebelumnya MNS) menyediakan kode contoh C# untuk menyelesaikan masalah yang dijelaskan dalam skenario sebelumnya. Prosesnya adalah sebagai berikut: Ketika konsumen memproses pesan, SMQ secara berkala memeriksa apakah perlu memanggil operasi ChangeVisibility. Setelah konsumen memproses pesan, operasi deleteMessage dipanggil untuk menghapus pesan.

Untuk informasi lebih lanjut tentang cara mengunduh kode contoh C#, lihat SDK untuk C++. Untuk dukungan teknis terkait penggunaan demo, ajukan tiket.

Saat menggunakan kode contoh, perhatikan informasi berikut:

  • Sebelum menjalankan kode, Anda harus mengonfigurasi accessId, accessKey, dan EndPoint.

  • Variabel:

    Variabel

    Deskripsi

    MessageMinimalLife

    Masa hidup minimal yang diperlukan saat pesan didaftarkan. Contohnya, jika pesan akan habis waktu 0,1 detik setelah didaftarkan, SMQ tidak memiliki waktu yang cukup untuk memanggil operasi ChangeVisibility guna memperpanjang masa hidup pesan. Oleh karena itu, MessageMinimalLife memastikan bahwa pesan tidak habis waktu sebelum SMQ dapat memanggil operasi ChangeVisibility untuk memperpanjang masa hidup pesan. Anda dapat menentukan parameter MessageMinimalLife berdasarkan kebutuhan bisnis Anda.

    TimerInterval

    Interval yang digunakan timer internal manajer untuk penjadwalan. Anda harus memastikan bahwa timer dimulai sebelum masa hidup pesan yang ditentukan berakhir. Anda dapat menetapkan nilai kecil untuk parameter TimerInterval sehingga pesan diperiksa dalam interval pendek.

    QueueMessageVisibilityTimeout

    Periode waktu tunggu default pesan dalam antrian. Saat Anda menggunakan kode contoh untuk memanggil operasi ChangeVisibility, nilai parameter VisibilityTimeout sama dengan yang ditentukan untuk parameter QueueMessageVisibilityTimeout. Oleh karena itu, nilai parameter QueueMessageVisibilityTimeout harus lebih besar dari jumlah nilai parameter TimerInterval dan MessageMinmalLife. Jika tidak, pesan mungkin habis waktu.

    MessageTimeout

    Periode waktu tunggu pesan dalam manajer. Contohnya, jika konsumen gagal, manajer tidak lagi mengubah visibilitas pesan. Kemudian, pesan habis waktu.

  • Proses:

    • Setelah pesan diterima, konsumen mendaftarkan dan memproses pesan tersebut, lalu memanggil operasi Manager.deleteMessage untuk menghapus pesan.

    • Setelah pesan didaftarkan, manajer memanggil operasi ThreadPool.ChangeVisibilityTask untuk memeriksa apakah operasi ChangeVisibility diperlukan. Lalu, manajer menambahkan pesan ke daftar pesan internal.

    • Timer dalam manajer secara berkala memanggil operasi Parallel.ChangeVisibilityTask untuk memeriksa semua pesan dalam daftar pesan.

    • Gambar berikut menggambarkan proses yang digunakan untuk mengelola waktu tunggu visibilitas pesan dengan memanggil operasi Manager.ChangeMessageVisibility (ChangeVisibilityTask).

      Gambar berikut menggambarkan prosedur pengelolaan waktu tunggu visibilitas pesan: