Saat mem-build sistem Pub/Sub, pembukaan payload dapat membantu Anda terhubung ke sistem lain yang tidak mematuhi semua persyaratan sistem penerapan endpoint push Pub/Sub standar.
Beberapa kasus penggunaan potensial untuk pembukaan payload adalah sebagai berikut:
- Anda tidak ingin menulis kode penguraian pesan khusus Pub/Sub untuk endpoint push HTTP Anda.
- Anda lebih memilih menerima metadata pesan Pub/Sub sebagai header HTTP, bukan metadata dalam isi HTTP POST.
- Anda ingin mengirim pesan Pub/Sub dan mengecualikan metadata Pub/Sub, misalnya saat mengirim data ke API pihak ketiga.
Cara kerja pembukaan payload
Pembukaan payload adalah fitur yang menghapus pesan Pub/Sub dari semua metadata pesan, kecuali data pesan. Dengan mengirimkan data pesan mentah, pelanggan dapat memproses pesan tanpa harus mematuhi persyaratan sistem Pub/Sub.
- Dengan pembukaan payload, data pesan akan dikirim langsung sebagai isi HTTP.
- Tanpa pembukaan payload, Pub/Sub akan mengirimkan objek JSON yang berisi beberapa kolom metadata pesan dan satu kolom data pesan. Dalam hal ini, JSON harus diurai untuk mengambil data pesan, lalu didekode dengan base64.
Menulis metadata
Setelah mengaktifkan pembukaan payload, Anda dapat menggunakan opsi tulis metadata yang menambahkan metadata pesan yang sebelumnya telah dihapus ke header permintaan.
- Menulis metadata diaktifkan. Tambahkan kembali metadata pesan ke header permintaan. Juga mengirimkan data pesan mentah yang telah didekode.
- Tulis metadata dinonaktifkan. Hanya mengirimkan data pesan mentah yang telah didekode.
Metadata penulisan diekspos melalui Pub/Sub, argumen Google Cloud CLI --push-no-wrapper-write-metadata
, dan properti API NoWrapper
.
Secara default, nilai ini adalah null.
Sebelum memulai
- Pelajari langganan Pub/Sub dan langganan push. Pembukaan payload hanya dapat digunakan dengan langganan push.
- Pelajari cara mengonfigurasi langganan push.
Contoh pesan yang digabungkan dan yang tidak digabungkan
Contoh berikut mengilustrasikan perbedaan antara mengirim
pesan HTTP yang digabungkan dan tidak digabungkan. Dalam contoh ini, data pesan berisi string {"status": "Hello there"}
.
Untuk contoh ini, langganan dibuat dengan fitur pembukaan
payload yang diaktifkan dan memublikasikan pesan ke mytopic
. Class ini menggunakan kunci
urutan dengan nilai some-key
dan jenis media dideklarasikan sebagai
application/json
.
gcloud pubsub topics publish mytopic --message='{"status": "Hello there"}' --ordering-key="some-key" --attribute "Content-Type=application/json"
Bagian berikut menunjukkan perbedaan antara pesan yang digabungkan dan tidak digabungkan.
Pesan yang dikemas
Contoh berikut menunjukkan pesan standar yang digabungkan untuk Pub/Sub. Dalam hal ini, payload pembukaan penggabungan tidak diaktifkan.
Memublikasikan | Diterima Endpoint Push |
---|---|
data="{"status": "Hello there"}" ordering_key="some-key" attributes= { {"Content-Type", "application/json"} } |
Content-Length: 361 Content-Type: application/json User-Agent: CloudPubSub-Google Host: subscription-project.uc.r.appspot.com { "message": { "attributes": { "Content-Type": "application/json" }, "data": "eyJzdGF0dXMiOiAiSGVsbG8gdGhlcmUifQ==", // Base64 - {"status": "Hello there"} "messageId": "2070443601311540", "message_id": "2070443601311540", "publishTime": "2021-02-26T19:13:55.749Z", "publish_time": "2021-02-26T19:13:55.749Z" }, "subscription": "projects/myproject/..." } |
Pesan tidak digabungkan dengan metadata tulis dinonaktifkan
Contoh berikut menunjukkan pesan yang belum digabungkan dengan opsi tulis metadata dinonaktifkan. Dalam hal ini, header x-goog-pubsub-*
dan atribut pesan
tidak disertakan.
Memublikasikan | Diterima Endpoint Push |
---|---|
data="{"status": "Hello there"}" ordering_key="some-key" attributes= { {"Content-Type", "application/json"} } |
Content-Length: 25 User-Agent: CloudPubSub-Google Host: subscription-project.uc.r.appspot.com {"status": "Hello there"} |
Pesan yang tidak digabungkan dengan metadata tulis diaktifkan
Contoh berikut menunjukkan pesan yang belum digabungkan dengan opsi tulis metadata yang diaktifkan. Dalam hal ini, header x-goog-pubsub-*
dan atribut pesan
disertakan.
Memublikasikan | Diterima Endpoint Push |
---|---|
data="{"status": "Hello there"}" ordering_key="some-key" attributes= { {"Content-Type", "application/json"} } |
x-goog-pubsub-subscription-name: "projects/myproject/..." x-goog-pubsub-message-id: "2070443601311540" x-goog-pubsub-publish-time: "2021-02-26T19:13:55.749Z" x-goog-pubsub-ordering-key: "some-key" Content-Type: application/json Content-Length: 12 User-Agent: CloudPubSub-Google Host: subscription-project.uc.r.appspot.com {"status": "Hello there"} |
Mengonfigurasi pembukaan payload
Anda dapat mengaktifkan pengiriman push unwrapping payload untuk langganan menggunakan halaman Subscription Details Konsol Google Cloud, Google Cloud CLI, atau Library Klien.
Konsol
Di konsol Google Cloud, buka halaman Langganan.
Klik Buat langganan.
Di kolom ID Langganan, masukkan nama.
Untuk mengetahui informasi tentang cara memberi nama langganan, lihat Panduan memberi nama topik atau langganan.
Pilih topik dari menu drop-down. Langganan ini menerima pesan dari topik.
Untuk Jenis pengiriman, pilih Push.
Untuk mengaktifkan pembukaan payload, pilih Enable payload unwrapping.
(Opsional) Untuk mempertahankan metadata pesan di header permintaan, pilih Tulis metadata. Anda harus mengaktifkan opsi ini untuk menetapkan header Content-Type untuk pesan Anda.
Tentukan URL endpoint.
Pertahankan semua nilai default lainnya.
Klik Create.
gcloud
Untuk mengonfigurasi langganan dengan pembukaan payload yang menyertakan header HTTP standar, jalankan perintah gcloud pubsub subscriptions create
berikut:
gcloud pubsub subscriptions create SUBSCRIPTION \ --topic TOPIC \ --push-endpoint=PUSH_ENDPOINT \ --push-no-wrapper
Ganti kode berikut:
SUBSCRIPTION
: nama atau ID langganan pull Anda.TOPIC
: ID topik.PUSH_ENDPOINT
: URL yang akan digunakan sebagai endpoint untuk langganan ini. Misalnya,https://myproject.appspot.com/myhandler
--push-no-wrapper
: mengirimkan data pesan secara langsung sebagai isi HTTP.
Untuk mengonfigurasi langganan dengan pembukaan payload dan mengontrol penggunaan
header x-goog-pubsub-*
, jalankan perintah berikut:
gcloud pubsub subscriptions create SUBSCRIPTION \ --topic TOPIC \ --push-endpoint=PUSH_ENDPOINT \ --push-no-wrapper \ --push-no-wrapper-write-metadata
--push-no-wrapper-write-metadata
: Jika true (benar), menulis metadata pesan Pub/Sub ke headerx-goog-pubsub-<KEY>:<VAL>
permintaan HTTP. Menulis atribut pesan Pub/Sub ke header<KEY>:<VAL>
permintaan HTTP.
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.
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.
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.
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.
Menetapkan header jenis konten dalam pesan
Setelah mengaktifkan pembukaan payload, Pub/Sub tidak
otomatis menetapkan kolom header jenis media dalam permintaan Anda. Jika Anda tidak menetapkan kolom header Content-Type
secara eksplisit, server web yang memproses permintaan Anda dapat menetapkan nilai default application/octet-stream
atau menafsirkan permintaan dengan cara yang tidak diharapkan.
Jika Anda memerlukan header Content-Type
, pastikan Anda mendeklarasikannya secara eksplisit pada waktu publikasi ke setiap pesan yang dipublikasikan. Untuk melakukannya, Anda harus
mengaktifkan Tulis metadata terlebih dahulu. Hasil pengaktifan Metadata tulis ini ditampilkan dalam contoh yang diberikan.
Langkah selanjutnya
- Jika Anda mengalami masalah dengan pembukaan payload, lihat Memecahkan masalah pembukaan payload.