Kegagalan publikasi biasanya disebabkan oleh bottleneck sisi klien, seperti CPU layanan yang tidak memadai, status thread yang buruk, atau kemacetan jaringan. Kebijakan percobaan ulang penayang menentukan jumlah percobaan pengiriman pesan oleh Pub/Sub dan jangka waktu antara setiap percobaan.
Dokumen ini memberikan informasi tentang penggunaan permintaan percobaan ulang dengan pesan yang dipublikasikan ke topik.
Sebelum memulai
Sebelum mengonfigurasi alur kerja publikasi, pastikan Anda telah menyelesaikan tugas berikut:
- Pelajari tentang topik dan alur kerja publikasi.
- Buat topik.
Peran yang diperlukan
Untuk mendapatkan izin yang diperlukan guna mencoba kembali permintaan pesan ke topik, minta administrator untuk memberi Anda peran IAM Pub/Sub Publisher (roles/pubsub.publisher) pada topik.
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Anda memerlukan izin tambahan untuk membuat atau memperbarui topik dan langganan.
Tentang permintaan percobaan ulang
Setelan percobaan ulang mengontrol cara library klien Pub/Sub mencoba kembali permintaan publikasi. Library klien memiliki salah satu setelan percobaan ulang berikut:
- Batas waktu permintaan awal: jumlah waktu sebelum library klien berhenti menunggu permintaan publikasi awal selesai.
- Penundaan percobaan ulang: jumlah waktu setelah permintaan mencapai batas waktu yang ditunggu library klien untuk mencoba kembali permintaan.
- Batas waktu total: jumlah waktu setelah library klien berhenti mencoba kembali permintaan publikasi.
Untuk mencoba kembali permintaan publikasi, batas waktu permintaan awal harus lebih singkat dari batas waktu total. Misalnya, jika Anda menggunakan backoff eksponensial, library klien akan menghitung batas waktu permintaan dan penundaan percobaan ulang sebagai berikut:
- Setelah setiap permintaan publikasi, batas waktu permintaan akan meningkat dengan pengganda batas waktu permintaan, hingga batas waktu permintaan maksimum.
- Setelah setiap percobaan ulang, penundaan percobaan ulang akan meningkat dengan pengganda penundaan percobaan ulang, hingga penundaan percobaan ulang maksimum.
Mencoba kembali permintaan pesan
Selama proses publikasi, Anda mungkin melihat kegagalan publikasi sementara atau permanen. Untuk error sementara, Anda biasanya tidak perlu melakukan tindakan khusus karena Pub/Sub otomatis mencoba kembali pesan.
Error juga dapat terjadi saat operasi publikasi berhasil, tetapi respons publikasi tidak diterima tepat waktu oleh klien penayang. Dalam hal ini juga, operasi publikasi akan dicoba kembali. Akibatnya, Anda dapat memiliki dua pesan identik dengan ID pesan yang berbeda.
Jika terjadi error persisten, pertimbangkan untuk menerapkan tindakan yang sesuai di luar proses publikasi untuk menghindari Pub/Sub yang berlebihan.
Kegagalan publikasi akan otomatis dicoba kembali, kecuali untuk error yang tidak memerlukan percobaan ulang. Contoh kode ini menunjukkan cara membuat penayang dengan setelan percobaan ulang kustom (perhatikan bahwa tidak semua library klien mendukung setelan percobaan ulang kustom; lihat dokumentasi Referensi API untuk bahasa yang Anda pilih):
C++
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan C++ di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi C++ API Pub/Sub.
C#
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan C# di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi C# API Pub/Sub.
Go
Contoh berikut menggunakan library klien Pub/Sub Go versi utama (v2). Jika Anda masih menggunakan library v1, lihat panduan migrasi ke v2. Untuk melihat daftar contoh kode v1, lihat contoh kode yang tidak digunakan lagi.
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Go API Pub/Sub.
Java
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Java API Pub/Sub.
Node.js
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Node.js API Pub/Sub.
Node.js
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Node.js API Pub/Sub.
Python
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Python API Pub/Sub.
Mencoba kembali permintaan dengan kunci pengurutan
Misalkan Anda memiliki satu klien penayang. Anda menggunakan library klien Pub/Sub untuk memublikasikan pesan 1, 2, dan 3 untuk kunci pengurutan A yang sama. Sekarang, asumsikan bahwa respons yang dipublikasikan untuk pesan 1 tidak diterima oleh klien penayang sebelum batas waktu RPC berakhir. Pesan 1 harus dipublikasikan ulang. Urutan pesan yang diterima oleh klien pelanggan kemudian menjadi 1, 1, 2, dan 3, jika Anda mengasumsikan pesan 2 dipublikasikan hanya setelah pesan 1 berhasil diselesaikan. Setiap pesan yang dipublikasikan memiliki ID pesannya sendiri. Dari perspektif klien pelanggan, empat pesan dipublikasikan, dengan dua pesan pertama memiliki konten yang identik.
Mencoba kembali permintaan publikasi dengan kunci pengurutan juga dapat dipersulit oleh setelan batch. Library klien mengelompokkan pesan untuk publikasi yang lebih efisien. Lanjutkan dengan contoh sebelumnya dan asumsikan bahwa pesan 1 dan 2 dikelompokkan bersama. Batch ini dikirim ke server sebagai satu permintaan. Jika server gagal menampilkan respons tepat waktu, klien penayang akan mencoba kembali batch dua pesan ini. Oleh karena itu, klien pelanggan mungkin menerima pesan 1, 2, 1, 2, dan 3. Jika Anda menggunakan library klien Pub/Sub untuk memublikasikan pesan secara berurutan dan operasi publikasi gagal, layanan akan menggagalkan operasi publikasi untuk semua pesan yang tersisa dengan kunci pengurutan yang sama. Klien penayang kemudian dapat memutuskan untuk mengikuti salah satu operasi berikut:
Publikasikan ulang semua pesan yang gagal secara berurutan
Publikasikan ulang sebagian pesan yang gagal secara berurutan
Publikasikan kumpulan pesan baru
Jika terjadi error yang tidak dapat dicoba kembali, library klien tidak akan memublikasikan pesan dan berhenti memublikasikan pesan lain dengan kunci pengurutan yang sama. Misalnya, saat penayang mengirim pesan ke topik yang tidak ada, error yang tidak dapat dicoba kembali akan terjadi. Untuk terus memublikasikan pesan dengan kunci pengurutan yang sama, panggil metode untuk melanjutkan publikasi, lalu mulai publikasikan lagi.
Contoh berikut menunjukkan cara melanjutkan publikasi pesan dengan kunci pengurutan yang sama.
C++
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan C++ di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi C++ API Pub/Sub.
C#
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan C# di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi C# API Pub/Sub.
Go
Contoh berikut menggunakan library klien Pub/Sub Go versi utama (v2). Jika Anda masih menggunakan library v1, lihat panduan migrasi ke v2. Untuk melihat daftar contoh kode v1, lihat contoh kode yang tidak digunakan lagi.
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Go API Pub/Sub.
Java
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Java API Pub/Sub.
Node.js
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Node.js API Pub/Sub.
Python
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Python API Pub/Sub.
Ruby
Contoh berikut menggunakan library klien Pub/Sub Ruby v3. Jika Anda masih menggunakan library v2, lihat panduan migrasi ke v3. Untuk melihat daftar contoh kode Ruby v2, lihat contoh kode yang tidak digunakan lagi.
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Ruby di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Ruby API Pub/Sub.
Langkah berikutnya
Untuk mempelajari cara mengonfigurasi opsi publikasi lanjutan, lihat hal berikut: