Kegagalan publikasi biasanya disebabkan oleh hambatan di sisi klien, seperti CPU layanan yang tidak memadai, kondisi thread yang buruk, atau kemacetan jaringan. Kebijakan percobaan ulang penerbit menentukan jumlah upaya Pub/Sub untuk mengirimkan pesan dan durasi waktu di antara setiap upaya.
Dokumen ini memberikan informasi tentang penggunaan permintaan coba lagi dengan pesan yang dipublikasikan ke 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 guna mencoba ulang permintaan pesan ke topik, minta administrator Anda untuk memberi Anda peran IAM Pub/Sub Publisher (roles/pubsub.publisher
) di 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 coba lagi mengontrol cara library klien Pub/Sub mencoba lagi permintaan publikasi. Library klien memiliki setelan coba lagi berikut:
- Waktu tunggu permintaan awal: jumlah waktu sebelum library klien berhenti menunggu permintaan publikasi awal selesai.
- Penundaan coba lagi: jangka waktu setelah permintaan kehabisan waktu yang ditunggu oleh library klien untuk mencoba lagi permintaan tersebut.
- 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 daripada total waktu tunggu. Misalnya, jika Anda menggunakan backoff eksponensial, library klien menghitung waktu tunggu permintaan dan penundaan percobaan ulang sebagai berikut:
- Setelah setiap permintaan publikasi, waktu tunggu permintaan akan bertambah dengan pengali waktu tunggu permintaan, hingga waktu tunggu permintaan maksimum.
- Setelah setiap percobaan ulang, penundaan percobaan ulang akan bertambah dengan pengali 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 mengambil 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 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 Pub/Sub yang berlebihan.
Kegagalan publikasi akan otomatis dicoba lagi, 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 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 API C# Pub/Sub.
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 Pub/Sub Java API.
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
Asumsikan 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 pesan sendiri. Dari perspektif klien subscriber, empat pesan telah dipublikasikan, dengan dua pesan pertama memiliki konten yang identik.
Mencoba ulang 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 dikirim secara berkelompok. 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 dapat 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 dengan kunci pengurutan yang sama. Klien penayang kemudian dapat memutuskan untuk mengikuti salah satu operasi berikut:
Mempublikasikan ulang semua pesan yang gagal secara berurutan
Mempublikasikan ulang subset 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 penerbit mengirim pesan ke topik yang tidak ada, terjadi error yang tidak dapat dicoba lagi. Untuk melanjutkan 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 API C# Pub/Sub.
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 Pub/Sub Java API.
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 API Ruby Pub/Sub.
Langkah berikutnya
Untuk mempelajari cara mengonfigurasi opsi publikasi lanjutan, lihat artikel berikut: