Dokumen ini memberikan ringkasan 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 secara otomatis. Anda juga dapat memilih antara pemrosesan pesan asinkron dan sinkron.
Sebelum memulai
Sebelum membaca dokumen ini, pastikan Anda sudah memahami hal-hal berikut:
Cara kerja Pub/Sub dan berbagai persyaratan Pub/Sub.
Berbagai jenis langganan yang didukung Pub/Sub dan alasan Anda perlu menggunakan langganan pull.
Alur kerja langganan pull
Untuk langganan pull, klien pelanggan Anda 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 level tinggi yang disediakan Google Cloud yang melakukan streaming permintaan pull secara internal dan mengirim pesan secara asinkron. Untuk klien pelanggan yang membutuhkan kontrol lebih besar atas cara pengambilan pesan, Pub/Sub menggunakan library gRPC yang dihasilkan secara otomatis dan level rendah. Library ini membuat permintaan pull atau streaming pull secara langsung. Permintaan ini bisa 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 merujuk ke Gambar 1:
- Klien pelanggan secara eksplisit memanggil metode
pull
, yang meminta pesan untuk dikirim. Permintaan ini adalahPullRequest
seperti yang ditunjukkan pada 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 dalam gambar.Klien pelanggan secara eksplisit memanggil metode
acknowledge
. Klien menggunakan ID konfirmasi yang ditampilkan untuk mengonfirmasi bahwa pesan telah 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 dikonfigurasi untuk langganan pull menentukan cara Anda menulis pesan ke langganan. Untuk 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 danModifyAck Tenggat Waktu unary saat Anda menerima pesan menggunakan API ini. Kedua Pub/Sub API dijelaskan dalam tab berikut.
API StreamingPull
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 ini adalah alur kerjanya:
Klien mengirimkan permintaan ke server untuk membuat koneksi. Jika kuota koneksi terlampaui, server akan menampilkan error resource habis. Library klien akan mencoba kembali error kehabisan kuota secara otomatis.
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 tersebut tidak terputus. Setiap kali ada cukup kuota throughput yang tersedia, streaming akan dilanjutkan.
Klien atau server pada akhirnya menutup koneksi.
StreamingPull API mempertahankan koneksi terbuka. Server Pub/Sub menutup koneksi berulang kali setelah jangka waktu tertentu untuk menghindari koneksi melekat yang berjalan lama. Library klien akan otomatis membuka kembali koneksi StreamingPull.
Pesan dikirim ke koneksi saat tersedia. Dengan demikian, StreamingPull API meminimalkan latensi dan memaksimalkan throughput untuk pesan.
Baca selengkapnya tentang metode REST StreamingPull: StreamingPullRequest dan StreamingPullResponse.
Baca selengkapnya tentang metode StreamingPull RPC: StreamingPullRequest dan StreamingPullResponse.
API Pull
API ini adalah RPC unary tradisional yang didasarkan pada model permintaan dan respons. Respons pull tunggal sesuai dengan satu permintaan pull. Berikut adalah alur kerjanya:
Klien mengirimkan permintaan pesan ke server. 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 beberapa 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.
Menggunakan 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 diproses secara bersamaan. Permintaan baru akan dibuat saat permintaan lama menerima respons. Merancang solusi seperti itu rentan error dan sulit dikelola. Sebaiknya gunakan StreamingPull API untuk kasus penggunaan tersebut.
Gunakan Pull API, bukan StreamingPull API hanya jika Anda memerlukan kontrol yang ketat atas hal-hal berikut:
- Jumlah pesan yang dapat diproses oleh klien pelanggan
- Memori klien dan resource
Anda juga dapat menggunakan API ini jika pelanggan Anda adalah proxy antara Pub/Sub dan layanan lain yang beroperasi dengan cara yang lebih berorientasi pada pull.
Baca selengkapnya tentang metode REST Pull: Method: 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 mode default untuk sebagian besar klien yang berlangganan. Mode pull asinkron dapat menggunakan StreamingPull API atau unary Pull API. Pull asinkron juga dapat menggunakan library klien tingkat tinggi atau library klien tingkat rendah yang dibuat secara otomatis.
Anda dapat mempelajari lebih lanjut tentang library klien 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 yang latensi rendah dan throughput yang tinggi bukan faktor yang paling penting jika 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 tepat atas memori, jaringan, atau CPU. Dalam kasus tersebut, gunakan mode sinkron dengan Pull API unary.
Library klien Pub/Sub
Pub/Sub menawarkan library klien yang dibuat otomatis tingkat tinggi dan tingkat rendah.
Library klien Pub/Sub tingkat tinggi
Library klien tingkat tinggi menyediakan opsi untuk mengontrol tenggat waktu konfirmasi dengan menggunakan manajemen sewa. Opsi ini lebih terperinci daripada saat Anda mengonfigurasi batas waktu konfirmasi dengan menggunakan konsol atau CLI di level langganan. Library klien tingkat tinggi juga menerapkan dukungan untuk fitur seperti pengiriman yang dipesan, pengiriman tepat satu kali, dan kontrol alur.
Sebaiknya gunakan pull asinkron dan StreamingPull API dengan library klien level 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 yang dibuat otomatis dan tingkat rendah
Library klien tingkat rendah tersedia jika 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 mengodekan fitur seperti pengiriman yang dipesan, pengiriman tepat satu kali, kontrol alur, dan pengelolaan sewa secara manual saat menggunakan library klien yang dibuat secara otomatis dan level rendah.
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 dihasilkan secara otomatis dan pull sinkron jika penggunaan Pull API secara langsung dapat dilakukan. Misalnya, Anda mungkin sudah memiliki logika aplikasi yang mengandalkan model ini.
Untuk langsung menggunakan library klien yang dibuat secara otomatis tingkat rendah, lihat Ringkasan Pub/Sub API.
Contoh kode library klien
Contoh kode library klien tingkat tinggi dan StreamingPull
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.
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 menarik pesan secara asinkron dan mengambil atribut khusus dari metadata.
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.
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 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 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 kode contoh untuk pull dan mengonfirmasi jumlah pesan yang tetap.
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.
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.
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.
PHP
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.
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 peringatan penting:
Menetapkan nilai untuk
max_messages
dalam permintaan tidak menjamin bahwamax_messages
akan ditampilkan, meskipun ada banyak pesan dalam backlog. Pub/Sub Pull API mungkin menampilkan kurang darimax_messages
guna mengurangi latensi pengiriman untuk pesan yang siap dikirim.Respons pull yang disertakan dengan 0 pesan tidak boleh digunakan sebagai indikator bahwa tidak ada pesan dalam backlog. Anda dapat memperoleh 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 diproses secara bersamaan. Seiring dengan meningkatnya throughput topik, lebih banyak permintaan pull yang diperlukan. Secara umum, mode StreamingPull lebih cocok untuk aplikasi yang sensitif terhadap latensi.
Kuota dan batas
Koneksi Pull dan StreamingPull tunduk pada kuota dan batas. Untuk informasi selengkapnya, lihat Kuota dan batas Pub/Sub.
Langkah selanjutnya
Buat langganan pull untuk topik Anda.
Membuat atau mengubah langganan dengan gcloud CLI.
Membuat atau mengubah langganan dengan REST API.
Buat atau ubah langganan dengan RPC API.