全部产品
Search
文档中心

:Cara mengimplementasikan mekanisme percobaan ulang koneksi ulang di klien

更新时间:Jul 02, 2025

Untuk memastikan keandalan interaksi dalam skenario guncangan jaringan atau ketidaknormalan server, Simple Message Queue (SMQ, sebelumnya MNS) klien menerapkan kebijakan keandalan yang mencakup baik produsen maupun konsumen.

Produsen: mekanisme percobaan ulang

  • Jenis-jenis pengecualian dan pemicu percobaan ulang

    • Jenis-jenis Pengecualian: Identifikasi dan kategorikan pengecualian klien (MNS ClientException, seperti waktu habis jaringan atau kesalahan pembatasan laju) dan pengecualian server (ServerException). Bedakan antara kesalahan yang dapat dicoba ulang (misalnya, kode kesalahan 5xx atau guncangan jaringan) dan kesalahan yang tidak dapat dicoba ulang (misalnya, sumber daya tidak ada QueueNotExist).

    • Percobaan Ulang Klien Sesuai Kebutuhan: Untuk mengirim ulang pesan sesuai kebutuhan, Anda dapat membuat logika percobaan ulang dalam kode bisnis berdasarkan persyaratan bisnis Anda.

  • Kebijakan backoff

    • Disarankan untuk mengimplementasikan kebijakan backoff eksponensial (misalnya, dimulai dari 1 detik, dibatasi hingga 60 detik) dikombinasikan dengan kebijakan jitter acak. Dengan cara ini, percobaan ulang tingkat kluster yang berlebihan dapat dihindari.

Konsumen: mekanisme percobaan ulang

  • Produsen: percobaan ulang otomatis

    • Dalam kasus konsumsi gagal (misalnya, pesan tidak diakui secara eksplisit atau waktu habis konsumsi), SMQ akan secara otomatis mengirim ulang pesan berdasarkan periode timeout visibilitas antrian saat klien menarik pesan baru.

  • Konsumen: desain idempotensi

    • Rancang logika bisnis agar bersifat idempoten secara alami (misalnya, deduplikasi melalui kunci unik basis data) atau verifikasi apakah pesan telah dikonsumsi berdasarkan pengenal pesan unik MessageId dikombinasikan dengan status layanan.

  • Penanganan pengecualian

    • Saat menghadapi pengecualian dalam logika konsumsi pesan, jangan kirim pesan pengakuan (ACK). Sebagai gantinya, izinkan SMQ untuk mengirim ulang pesan sampai berhasil dikonsumsi, pada titik mana Anda dapat memanggil operasi DeleteMessage untuk menghapus pesan tersebut.

Referensi

Untuk contoh kode dalam Java, lihat Gunakan contoh kode untuk menerima pesan.