Kontrol konkurensi adalah fitur yang tersedia di library klien tingkat tinggi Pub/Sub. Anda juga dapat menerapkan kontrol serentak Anda sendiri saat menggunakan library tingkat rendah.
Dukungan untuk kontrol serentak bergantung pada bahasa pemrograman library klien. Untuk implementasi bahasa yang mendukung thread paralel, seperti C++, Go, dan Java, library klien membuat pilihan default untuk jumlah thread.
Pilihan ini mungkin tidak optimal untuk aplikasi Anda. Misalnya, jika aplikasi subscriber tidak mengimbangi volume pesan masuk dan tidak terikat CPU, Anda harus meningkatkan jumlah thread. Untuk operasi pemrosesan pesan yang intensif CPU, mengurangi jumlah thread mungkin sesuai.
Halaman ini menjelaskan konsep kontrol serentak dan cara menyiapkan fitur untuk klien pelanggan Anda. Untuk mengonfigurasi klien penayang untuk kontrol serentak, lihat Kontrol serentak.
Konfigurasi kontrol konkurensi
Nilai default untuk variabel kontrol serentak dan nama variabel mungkin berbeda di seluruh library klien. Untuk mengetahui informasi selengkapnya, lihat
Dokumentasi Referensi API.
Misalnya, di library klien Java, metode untuk
mengonfigurasi kontrol konkurensi adalah setParallelPullCount()
,
setExecutorProvider()
, setSystemExecutorProvider()
, dan
setChannelProvider()
.
setParallelPullCount() memungkinkan Anda menentukan jumlah streaming yang akan dibuka. Anda dapat membuka lebih banyak streaming jika klien pelanggan dapat menangani lebih banyak data daripada yang dikirim pada satu streaming yang berukuran 10 MBps.
setExecutorProvider() memungkinkan Anda menyesuaikan penyedia eksekutor yang digunakan untuk memproses pesan. Misalnya, Anda dapat mengubah penyedia eksekutor menjadi penyedia yang menampilkan satu eksekutor bersama dengan jumlah thread terbatas di beberapa klien pelanggan. Konfigurasi ini membantu membatasi jumlah thread yang dibuat. Jumlah total thread yang digunakan untuk kontrol serentak bergantung pada penyedia eksekutor yang diteruskan dalam library klien dan jumlah pull paralel.
setSystemExecutorProvider() memungkinkan Anda menyesuaikan penyedia eksekutor yang digunakan untuk pengelolaan sewa. Biasanya, Anda tidak mengonfigurasi nilai ini kecuali jika ingin menggunakan penyedia eksekutor yang sama di
setExecutorProvider
dansetSystemExecutorProvider
. Misalnya, Anda dapat menggunakan penyedia eksekutor yang sama jika memiliki sejumlah langganan dengan throughput rendah. Menggunakan nilai yang sama akan membatasi jumlah thread di klien.setChannelProvider() memungkinkan Anda menyesuaikan penyedia saluran yang digunakan untuk membuka koneksi ke Pub/Sub. Biasanya, Anda tidak mengonfigurasi nilai ini kecuali jika Anda ingin menggunakan saluran yang sama di beberapa klien pelanggan. Menggunakan kembali saluran di terlalu banyak klien dapat mengakibatkan error
GOAWAY
atauENHANCE_YOUR_CALM
. Jika Anda melihat error ini di log aplikasi atau Cloud Logging, buat lebih banyak saluran.
Contoh kode untuk kontrol serentak
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.
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
Baca tentang opsi pengiriman lainnya yang dapat Anda konfigurasikan untuk langganan:
Menangani kegagalan pesan dengan kebijakan percobaan ulang langganan
Meneruskan pesan yang tidak terkirim ke topik yang dihentikan pengirimannya
Memutar ulang pesan yang sebelumnya telah di-ACK atau menghapus permanen pesan