Kegagalan publikasi biasanya disebabkan oleh hambatan sisi klien, seperti CPU layanan yang tidak memadai, kondisi thread yang buruk, atau kemacetan jaringan. Kebijakan percobaan ulang penayang menentukan frekuensi Pub/Sub mencoba mengirim pesan dan lama waktu antara setiap upaya.
Dokumen ini memberikan informasi tentang penggunaan permintaan coba lagi dengan pesan yang dipublikasikan ke suatu topik.
Sebelum memulai
Sebelum mengonfigurasi alur kerja publikasi, pastikan Anda telah menyelesaikan tugas berikut:
- Pelajari topik dan alur kerja publikasi.
- Buat topik.
Peran yang diperlukan
Untuk mendapatkan izin yang diperlukan untuk mencoba kembali permintaan pesan ke suatu topik,
minta administrator untuk memberi Anda peran IAM
Pub/Sub Publisher (roles/pubsub.publisher
) sesuai topik.
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses.
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:
- Waktu tunggu permintaan awal: jumlah waktu sebelum library klien berhenti menunggu permintaan publikasi awal selesai.
- Penundaan percobaan ulang: jumlah waktu setelah permintaan berakhir saat library klien menunggu untuk mencoba lagi permintaan tersebut.
- Total waktu tunggu: jumlah waktu setelah library klien berhenti mencoba kembali permintaan publikasi.
Untuk mencoba kembali 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 sebesar pengganda waktu tunggu permintaan, hingga waktu tunggu permintaan maksimum.
- Setelah setiap percobaan ulang, penundaan percobaan ulang akan meningkat sebesar 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, biasanya Anda tidak perlu melakukan tindakan khusus karena Pub/Sub 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 dicoba ulang. Akibatnya, Anda dapat memiliki dua pesan yang identik dengan ID pesan yang berbeda.
Jika terjadi error terus-menerus, pertimbangkan untuk menerapkan tindakan yang sesuai di luar proses publikasi agar Pub/Sub tidak berlebihan.
Kegagalan publikasi akan dicoba lagi secara otomatis, kecuali untuk error yang tidak menjamin percobaan ulang. Kode contoh ini menunjukkan pembuatan penayang dengan setelan coba lagi kustom (perlu diperhatikan bahwa tidak semua library klien mendukung setelan percobaan ulang kustom; lihat dokumentasi Referensi API untuk bahasa pilihan Anda):
C
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan C di Panduan Memulai: Menggunakan Library Klien. Untuk 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 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 informasi selengkapnya, lihat dokumentasi referensi API Pub/Sub Java.
Node.js
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di Panduan Memulai: Menggunakan Library Klien. Untuk informasi selengkapnya, lihat dokumentasi referensi Pub/Sub Node.js API.
Node.js
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di Panduan Memulai: Menggunakan Library Klien. Untuk informasi selengkapnya, lihat dokumentasi referensi Pub/Sub Node.js API.
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.
Coba 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 menganggap 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 identik.
Mencoba ulang permintaan publikasi dengan kunci pengurutan juga dapat menjadi rumit 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 secara tepat waktu, klien penayang akan mencoba kembali tumpukan dua pesan ini. Oleh karena itu, ada kemungkinan bahwa klien pelanggan 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 publikasi akan gagal dalam operasi publikasi untuk semua pesan yang tersisa pada 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
Memublikasikan kumpulan pesan baru
Jika terjadi error yang tidak dapat dicoba lagi, 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 lagi 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 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 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 informasi selengkapnya, lihat dokumentasi referensi API Pub/Sub Java.
Node.js
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di Panduan Memulai: Menggunakan Library Klien. Untuk informasi selengkapnya, lihat dokumentasi referensi Pub/Sub Node.js API.
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 referensi berikut: