Kegagalan publikasi biasanya disebabkan oleh bottleneck sisi klien, seperti CPU layanan yang tidak memadai, kondisi thread yang buruk, atau kemacetan jaringan. Kebijakan percobaan ulang penayang menentukan jumlah upaya Pub/Sub untuk mengirim pesan dan durasi waktu antara setiap upaya.
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-tugas berikut:
- Pelajari topik dan alur kerja publikasi.
- Buat topik.
Peran yang diperlukan
Untuk mendapatkan izin yang diperlukan guna mencoba ulang 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 ulang permintaan publikasi. Library klien memiliki salah satu setelan percobaan ulang berikut:
- Waktu tunggu permintaan awal: jumlah waktu sebelum library klien berhenti menunggu permintaan publikasi awal selesai.
- Penundaan percobaan ulang: jumlah waktu setelah waktu tunggu permintaan habis yang ditunggu library klien untuk mencoba ulang permintaan.
- Total waktu tunggu: jumlah waktu setelah library klien berhenti mencoba lagi permintaan publikasi.
Untuk mencoba lagi permintaan publikasi, waktu tunggu permintaan awal harus lebih singkat dari total waktu tunggu. Misalnya, jika Anda menggunakan backoff eksponensial, library klien akan menghitung waktu tunggu permintaan dan penundaan percobaan ulang sebagai berikut:
- Setelah setiap permintaan publikasi, waktu tunggu permintaan akan bertambah dengan pengganda waktu tunggu permintaan, hingga waktu tunggu permintaan maksimum.
- Setelah setiap percobaan ulang, penundaan percobaan ulang akan bertambah dengan pengganda penundaan percobaan ulang, hingga penundaan percobaan ulang maksimum.
Mencoba lagi 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 akan otomatis mencoba ulang 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 lagi. Akibatnya, Anda dapat memiliki dua pesan yang identik dengan ID pesan yang berbeda.
Jika terjadi error yang terus-menerus, pertimbangkan untuk menerapkan tindakan yang sesuai di luar proses publikasi untuk menghindari kelebihan beban Pub/Sub.
Kegagalan publikasi akan otomatis dicoba lagi, kecuali untuk error yang tidak memerlukan percobaan ulang. Kode contoh ini menunjukkan pembuatan 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 Pub/Sub C++ API.
C#
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan C# di Panduan Memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Pub/Sub C# API.
Go
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di Panduan Memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Pub/Sub Go API.
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 API Node.js 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 API Node.js Pub/Sub.
Python
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di Panduan Memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Pub/Sub Python API.
Mencoba lagi 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 hanya dipublikasikan 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 lagi 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 lagi kumpulan 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 gagal melakukan operasi publikasi untuk semua pesan yang tersisa pada kunci pengurutan yang sama. Klien penayang kemudian dapat memutuskan untuk mengikuti salah satu operasi berikut:
Memublikasikan ulang semua pesan yang gagal secara berurutan
Memublikasikan ulang sebagian pesan yang gagal secara berurutan
Memublikasikan kumpulan pesan baru
Jika terjadi error yang tidak dapat dicoba ulang, 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 ulang akan terjadi. Untuk terus memublikasikan pesan dengan kunci pengurutan yang sama, panggil metode untuk melanjutkan publikasi, lalu mulai memublikasikan 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 Pub/Sub C++ API.
C#
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan C# di Panduan Memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Pub/Sub C# API.
Go
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di Panduan Memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Pub/Sub Go API.
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 API Node.js Pub/Sub.
Python
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di Panduan Memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Pub/Sub Python API.
Ruby
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Ruby di Panduan Memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Pub/Sub Ruby API.
Langkah selanjutnya
Untuk mempelajari cara mengonfigurasi opsi publikasi lanjutan, lihat hal berikut: