Dokumen ini memberikan ringkasan tentang langganan pull, alur kerjanya, dan properti terkait.
Dalam langganan pull, klien pelanggan meminta pesan dari server Pub/Sub.
Mode pull dapat menggunakan salah satu dari dua API layanan, Pull atau StreamingPull. Untuk menjalankan API yang dipilih, Anda dapat memilih library klien tingkat tinggi yang disediakan Google, atau library klien tingkat rendah yang dibuat otomatis. Anda juga dapat memilih antara pemrosesan pesan asinkron dan sinkron.
Sebelum memulai
Sebelum membaca dokumen ini, pastikan Anda memahami hal-hal berikut:
Cara kerja Pub/Sub dan berbagai istilah Pub/Sub.
Berbagai jenis langganan yang didukung Pub/Sub dan alasan Anda mungkin ingin menggunakan langganan pull.
Alur kerja langganan pull
Untuk langganan pull, klien pelanggan Anda akan memulai permintaan ke server Pub/Sub untuk mengambil pesan. Klien pelanggan menggunakan salah satu API berikut:
Sebagian besar klien pelanggan tidak membuat permintaan ini secara langsung. Sebagai gantinya, klien mengandalkan library klien tingkat tinggi yang disediakan Google Cloud yang melakukan permintaan pull streaming secara internal dan mengirimkan pesan secara asinkron. Untuk klien pelanggan yang memerlukan kontrol lebih besar atas cara pesan diambil, Pub/Sub menggunakan library gRPC tingkat rendah dan yang dibuat secara otomatis. Library ini membuat permintaan pull atau streaming pull secara langsung. Permintaan ini dapat bersifat sinkron atau asinkron.
Dua gambar berikut menunjukkan alur kerja antara klien pelanggan dan langganan pull.
Alur kerja pull
Alur kerja pull adalah sebagai berikut dan mereferensikan Gambar 1:
- Klien pelanggan secara eksplisit memanggil metode
pull
, yang meminta pesan untuk dikirim. Permintaan ini adalahPullRequest
seperti yang ditunjukkan dalam gambar. Server Pub/Sub merespons dengan nol atau beberapa pesan dan ID konfirmasi. Respons dengan nol pesan atau dengan error tidak selalu menunjukkan bahwa tidak ada pesan yang tersedia untuk diterima. Respons ini adalah
PullResponse
seperti yang ditunjukkan pada gambar.Klien pelanggan secara eksplisit memanggil metode
acknowledge
. Klien menggunakan ID konfirmasi yang ditampilkan untuk mengonfirmasi bahwa pesan diproses dan tidak perlu dikirim lagi.
Untuk satu permintaan pull streaming, klien pelanggan dapat memiliki beberapa respons yang ditampilkan karena koneksi terbuka. Sebaliknya, hanya satu respons yang ditampilkan untuk setiap permintaan pull.
Properti langganan pull
Properti yang Anda konfigurasikan untuk langganan pull menentukan cara Anda menulis pesan ke langganan. Untuk mengetahui informasi selengkapnya, lihat properti langganan.
API layanan Pub/Sub
Langganan pull Pub/Sub dapat menggunakan salah satu dari dua API berikut untuk mengambil pesan:
- Tarik
- StreamingPull
Gunakan RPC Acknowledge dan ModifyAckDeadline unary saat Anda menerima pesan menggunakan API ini. Kedua API Pub/Sub dijelaskan di bagian berikut.
StreamingPull API
Jika memungkinkan, library klien Pub/Sub menggunakan StreamingPull untuk throughput maksimum dan latensi terendah. Meskipun Anda mungkin tidak pernah menggunakan StreamingPull API secara langsung, penting untuk mengetahui perbedaannya dengan Pull API.
StreamingPull API mengandalkan koneksi dua arah yang persisten untuk menerima beberapa pesan saat tersedia. Berikut adalah alur kerjanya:
Klien mengirimkan permintaan ke server untuk membuat koneksi. Jika kuota koneksi terlampaui, server akan menampilkan error resource habis. Library klien akan otomatis mencoba kembali error kehabisan kuota.
Jika tidak ada error atau kuota koneksi tersedia lagi, server akan terus mengirim pesan ke klien yang terhubung.
Jika atau saat kuota throughput terlampaui, server akan berhenti mengirim pesan. Namun, koneksi tidak terputus. Setiap kali kuota throughput yang memadai tersedia lagi, streaming akan dilanjutkan.
Klien atau server pada akhirnya akan menutup koneksi.
StreamingPull API mempertahankan koneksi yang terbuka. Server Pub/Sub secara berulang menutup koneksi setelah jangka waktu tertentu untuk menghindari koneksi melekat yang berjalan lama. Library klien akan otomatis membuka kembali koneksi StreamingPull.
Pesan akan dikirim ke koneksi saat tersedia. Dengan demikian, StreamingPull API meminimalkan latensi dan memaksimalkan throughput untuk pesan.
Baca selengkapnya tentang metode StreamingPull RPC: StreamingPullRequest dan StreamingPullResponse.
Pull API
API ini adalah RPC unary tradisional yang didasarkan pada model permintaan dan respons. Satu respons pull sesuai dengan satu permintaan pull. Berikut adalah alur kerjanya:
Klien mengirimkan permintaan ke server untuk pesan. Jika kuota throughput terlampaui, server akan menampilkan error resource habis.
Jika tidak ada error atau kuota throughput tersedia lagi, server akan membalas dengan nol atau lebih pesan dan ID konfirmasi.
Saat menggunakan Pull API unary, respons dengan nol pesan atau dengan error tidak selalu menunjukkan bahwa tidak ada pesan yang tersedia untuk diterima.
Penggunaan Pull API tidak menjamin latensi rendah dan throughput pesan yang tinggi. Untuk mencapai throughput tinggi dan latensi rendah dengan Pull API, Anda harus memiliki beberapa permintaan yang belum terselesaikan secara serentak. Permintaan baru dibuat saat permintaan lama menerima respons. Merancang solusi semacam itu rawan error dan sulit dikelola. Sebaiknya gunakan StreamingPull API untuk kasus penggunaan tersebut.
Gunakan Pull API, bukan StreamingPull API, hanya jika Anda memerlukan kontrol ketat atas hal berikut:
- Jumlah pesan yang dapat diproses oleh klien pelanggan
- Memori dan resource klien
Anda juga dapat menggunakan API ini jika subscriber Anda adalah proxy antara Pub/Sub dan layanan lain yang beroperasi dengan cara yang lebih berorientasi pull.
Baca selengkapnya tentang metode REST Pull: Metode: projects.subscriptions.pull.
Baca selengkapnya tentang metode Pull RPC: PullRequest dan PullResponse.
Jenis mode pemrosesan pesan
Pilih salah satu mode pull berikut untuk klien pelanggan Anda.
Mode pull asinkron
Mode pull asinkron memisahkan penerimaan pesan dari pemrosesan pesan di klien pelanggan. Mode ini adalah default untuk sebagian besar klien pelanggan. Mode pull asinkron dapat menggunakan StreamingPull API atau Pull API unary. Pull asinkron juga dapat menggunakan library klien tingkat tinggi atau library klien tingkat rendah yang dibuat otomatis.
Anda dapat mempelajari library klien lebih lanjut nanti dalam dokumen ini.
Mode pull sinkron
Dalam mode pull sinkron, penerimaan dan pemrosesan pesan terjadi secara berurutan dan tidak dipisahkan satu sama lain. Oleh karena itu, mirip dengan StreamingPull versus unary Pull API, pemrosesan asinkron menawarkan latensi yang lebih rendah dan throughput yang lebih tinggi daripada pemrosesan sinkron.
Gunakan mode pull sinkron hanya untuk aplikasi dengan latensi rendah dan throughput tinggi yang bukan merupakan faktor terpenting dibandingkan dengan beberapa persyaratan lainnya. Misalnya, aplikasi mungkin dibatasi untuk hanya menggunakan model pemrograman sinkron. Atau, aplikasi dengan batasan resource mungkin memerlukan kontrol yang lebih akurat atas memori, jaringan, atau CPU. Dalam kasus tersebut, gunakan mode sinkron dengan Pull API unary.
Library klien Pub/Sub
Pub/Sub menawarkan library klien tingkat tinggi dan tingkat rendah yang dihasilkan secara otomatis.
Library klien Pub/Sub tingkat tinggi
Library klien tingkat tinggi menyediakan opsi untuk mengontrol batas waktu konfirmasi dengan menggunakan pengelolaan sewa. Opsi ini lebih terperinci daripada saat Anda mengonfigurasi batas waktu konfirmasi dengan menggunakan konsol atau CLI di tingkat langganan. Library klien tingkat tinggi juga menerapkan dukungan untuk fitur seperti pengiriman yang diurutkan, pengiriman tepat sekali, dan kontrol alur.
Sebaiknya gunakan pull asinkron dan StreamingPull API dengan library klien tingkat tinggi. Tidak semua bahasa yang didukung untuk Google Cloud juga mendukung Pull API di library klien tingkat tinggi.
Untuk menggunakan library klien tingkat tinggi, lihat Library klien Pub/Sub.
Library klien Pub/Sub tingkat rendah yang dibuat secara otomatis
Library klien level rendah tersedia untuk kasus saat Anda harus menggunakan Pull API secara langsung. Anda dapat menggunakan pemrosesan sinkron atau asinkron dengan library klien tingkat rendah yang dibuat secara otomatis. Anda harus membuat kode fitur secara manual seperti pengiriman yang diurutkan, pengiriman tepat sekali, kontrol alur, dan pengelolaan sewa saat menggunakan library klien tingkat rendah yang dibuat otomatis.
Anda dapat menggunakan model pemrosesan sinkron saat menggunakan library klien tingkat rendah yang dibuat otomatis untuk semua bahasa yang didukung. Anda dapat menggunakan library klien tingkat rendah yang dibuat otomatis dan pull sinkron jika menggunakan Pull API secara langsung masuk akal. Misalnya, Anda mungkin memiliki logika aplikasi yang ada yang mengandalkan model ini.
Untuk menggunakan library klien tingkat rendah yang dibuat otomatis secara langsung, lihat ringkasan Pub/Sub API.
Contoh kode library klien
Contoh kode library klien StreamingPull dan tingkat tinggi
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.
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.
Mengambil atribut khusus menggunakan library klien tingkat tinggi
Contoh berikut menunjukkan cara mengambil pesan secara asinkron dan mengambil atribut kustom dari metadata.
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.
Menangani error menggunakan library klien tingkat tinggi
Contoh berikut menunjukkan cara menangani error yang muncul saat berlangganan pesan.
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 Go di Panduan Memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Pub/Sub Go API.
Contoh kode pull unary
Berikut adalah beberapa contoh kode untuk mengambil dan mengonfirmasi jumlah pesan tetap.
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.
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.
PHP
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.
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.
Protokol
Permintaan:
POST https://pubsub.googleapis.com/v1/projects/myproject/subscriptions/mysubscription:pull
{
"returnImmediately": "false",
"maxMessages": "1"
}
Respons:
200 OK
{
"receivedMessages": [{
"ackId": "dQNNHlAbEGEIBERNK0EPKVgUWQYyODM2LwgRHFEZDDsLRk1SK...",
"message": {
"data": "SGVsbG8gQ2xvdWQgUHViL1N1YiEgSGVyZSBpcyBteSBtZXNzYWdlIQ==",
"messageId": "19917247034"
}
}]
}
Permintaan:
POST https://pubsub.googleapis.com/v1/projects/myproject/subscriptions/mysubscription:acknowledge
{
"ackIds": [
"dQNNHlAbEGEIBERNK0EPKVgUWQYyODM2LwgRHFEZDDsLRk1SK..."
]
}
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.
Pub/Sub mengirimkan daftar pesan. Jika daftar memiliki beberapa pesan, Pub/Sub akan mengurutkan pesan dengan kunci pengurutan yang sama. Berikut adalah beberapa pengecualian penting:
Menetapkan nilai untuk
max_messages
dalam permintaan tidak menjamin bahwamax_messages
ditampilkan, meskipun ada banyak pesan dalam backlog. Pub/Sub Pull API mungkin menampilkan kurang darimax_messages
untuk mengurangi latensi pengiriman pesan yang siap dikirim.Respons pull yang berisi 0 pesan tidak boleh digunakan sebagai indikator bahwa tidak ada pesan dalam backlog. Anda bisa mendapatkan respons dengan 0 pesan dan memiliki permintaan berikutnya yang menampilkan pesan.
Untuk mencapai latensi pengiriman pesan yang rendah dengan mode pull unary, Anda harus memiliki banyak permintaan pull yang belum terselesaikan secara bersamaan. Seiring peningkatan throughput topik, lebih banyak permintaan pull diperlukan. Secara umum, mode StreamingPull lebih disukai untuk aplikasi yang sensitif terhadap latensi.
Kuota dan batas
Koneksi Pull dan StreamingPull tunduk pada kuota dan batas. Untuk mengetahui informasi selengkapnya, lihat Kuota dan batas Pub/Sub.
Langkah selanjutnya
Buat langganan pull untuk topik Anda.
Buat atau ubah langganan dengan gcloud CLI.
Buat atau ubah langganan dengan REST API.
Buat atau ubah langganan dengan RPC API.