Halaman ini menjelaskan cara membuat langganan Pub/Sub dengan filter.
Saat menerima pesan dari langganan dengan filter, Anda hanya akan menerima pesan yang cocok dengan filter tersebut. Layanan Pub/Sub secara otomatis mengonfirmasi pesan yang tidak cocok dengan filter. Anda dapat memfilter pesan berdasarkan atributnya, tetapi tidak menurut data dalam pesan.
Anda dapat memiliki beberapa langganan yang terkait dengan suatu topik dan setiap langganan dapat memiliki filter yang berbeda.
Misalnya, jika memiliki topik yang menerima berita dari berbagai dunia, Anda dapat mengonfigurasi langganan untuk memfilter berita yang dipublikasikan hanya dari wilayah tertentu. Untuk konfigurasi ini, Anda harus memastikan bahwa salah satu atribut pesan topik menyampaikan wilayah publikasi berita.
Saat menerima pesan dari langganan dengan filter, Anda tidak dikenai biaya pesan keluar untuk pesan yang dikonfirmasi Pub/Sub secara otomatis. Anda dikenai biaya pengiriman pesan dan biaya terkait penyimpanan pesan untuk pesan ini.
Membuat langganan dengan filter
Langganan pull dan push dapat memiliki filter. Semua pelanggan dapat menerima pesan dari langganan dengan filter, termasuk pelanggan yang menggunakan StreamingPull API.
Anda dapat membuat langganan dengan filter menggunakan Konsol Google Cloud, Google Cloud CLI, library klien, atau Pub/Sub API.
Konsol
Untuk membuat langganan pull dengan filter, ikuti langkah-langkah berikut:
Di konsol Google Cloud, buka halaman Langganan.
Klik Buat langganan.
Masukkan ID Langganan.
Pilih atau buat topik dari menu drop-down. Langganan menerima pesan dari topik.
Di bagian Filter langganan, masukkan ekspresi filter.
Klik Create.
Untuk membuat langganan push dengan filter, ikuti langkah-langkah berikut:
Di konsol Google Cloud, buka halaman Langganan.
Klik Buat langganan.
Masukkan ID Langganan.
Pilih atau buat topik dari menu drop-down. Langganan menerima pesan dari topik.
Di bagian Jenis pengiriman, klik Kirim.
Di kolom URL endpoint, masukkan URL endpoint push.
Di bagian Filter langganan, masukkan ekspresi filter.
Klik Create.
gcloud
Untuk membuat langganan pull dengan filter, gunakan
perintah gcloud pubsub subscriptions create
dengan flag --message-filter
:
gcloud pubsub subscriptions create SUBSCRIPTION_ID \ --topic=TOPIC_ID \ --message-filter='FILTER'
Ganti kode berikut:
- SUBSCRIPTION_ID: ID langganan yang akan dibuat
- TOPIC_ID: ID topik untuk dilampirkan ke langganan
- FILTER: ekspresi dalam sintaksis pemfilteran
Untuk membuat langganan push dengan filter, gunakan
perintah gcloud pubsub subscriptions create
dengan flag --push-endpoint
dan --message-filter
:
gcloud pubsub subscriptions create SUBSCRIPTION_ID \ --topic=TOPIC_ID \ --push-endpoint=PUSH_ENDPOINT \ --message-filter='FILTER'
Ganti kode berikut:
- SUBSCRIPTION_ID: ID langganan yang akan dibuat
- TOPIC_ID: ID topik untuk dilampirkan ke langganan
- PUSH_ENDPOINT: URL server tempat pelanggan push berjalan
- FILTER: ekspresi dalam sintaksis pemfilteran
REST
Untuk membuat langganan dengan filter, gunakan
metode
projects.subscriptions.create
.
PUT https://pubsub.googleapis.com/v1/projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID Authorization: Bearer $(gcloud auth print-access-token)
Ganti kode berikut:
- PROJECT_ID: project ID untuk project tempat langganan akan dibuat
- SUBSCRIPTION_ID: ID langganan yang akan dibuat
Untuk membuat langganan pull dengan filter, tentukan filter dalam isi permintaan:
{ "topic": "projects/PROJECT_ID/topics/TOPIC_ID", "filter": "FILTER" }
Ganti kode berikut:
- PROJECT_ID: project ID untuk project dengan topik
- TOPIC_ID: ID topik untuk dilampirkan ke langganan
- FILTER: ekspresi dalam sintaksis pemfilteran
Untuk membuat langganan push dengan filter, tentukan endpoint push dan filter dalam isi permintaan:
{ "topic": "projects/PROJECT_ID/topics/TOPIC_ID", "pushConfig": { "pushEndpoint": "PUSH_ENDPOINT" }, "filter": "FILTER" }
Ganti kode berikut:
- PROJECT_ID: project ID untuk project dengan topik
- TOPIC_ID: ID topik untuk dilampirkan ke langganan
- PUSH_ENDPOINT: URL server tempat pelanggan push berjalan
- FILTER: ekspresi dalam sintaksis pemfilteran
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.
PHP
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan PHP di Panduan Memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Pub/Sub PHP 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.
Panjang maksimum filter adalah 256 byte. Filter adalah properti yang tidak dapat diubah dari langganan. Setelah membuat langganan, Anda tidak dapat memperbarui langganan untuk mengubah filter.
Cara filter memengaruhi metrik backlog
Untuk memantau langganan yang baru saja dibuat, lihat Memantau langganan dengan filter.
Jika Anda mengaktifkan pemfilteran, metrik backlog hanya akan menyertakan data dari pesan yang cocok dengan filter. Berikut adalah daftar metrik backlog:
subscription/backlog_bytes
subscription/unacked_bytes_by_region
subscription/num_undelivered_messages
subscription/num_unacked_messages_by_region
subscription/oldest_unacked_message_age
subscription/oldest_unacked_message_age_by_region
topic/unacked_bytes_by_region
topic/num_unacked_messages_by_region
topic/oldest_unacked_messages_age_by_region
Untuk mempelajari metrik ini lebih lanjut, lihat daftar metrik Pub/Sub.
Memperbarui filter untuk langganan
Anda tidak dapat memperbarui filter untuk langganan yang ada. Sebagai gantinya, ikuti solusi ini.
Ambil ringkasan langganan yang filternya ingin Anda ubah.
Untuk mengetahui lebih lanjut cara mengambil snapshot menggunakan konsol, lihat Membuat snapshot.
Buat langganan baru dengan filter baru.
Untuk mengetahui lebih lanjut cara membuat langganan dengan filter, lihat Membuat langganan dengan filter.
Di konsol Google Cloud, buka halaman Langganan Pub/Sub.
Klik langganan yang baru saja Anda buat.
Di halaman detail langganan, klik Putar ulang pesan.
Untuk Seek, klik To a snapshot.
Pilih snapshot yang Anda buat untuk langganan awal di langkah 1, lalu klik Seek.
Tidak ada pesan yang hilang selama transisi.
Ubah pelanggan agar dapat menggunakan langganan baru.
Setelah menyelesaikan prosedur ini, Anda dapat melanjutkan dan menghapus langganan awal.
Sintaksis untuk membuat filter
Untuk memfilter pesan, tulis ekspresi yang beroperasi pada atribut. Anda dapat menulis ekspresi yang cocok dengan kunci atau nilai atribut. ID
attributes
memilih atribut dalam pesan.
Misalnya, filter dalam tabel berikut memilih atribut name
:
Filter | Deskripsi |
---|---|
attributes:name |
Pesan dengan atribut name |
NOT attributes:name |
Pesan tanpa atribut name |
attributes.name = "com" |
Pesan dengan atribut name dan nilai com |
attributes.name != "com" |
Pesan tanpa atribut name dan nilai com |
hasPrefix(attributes.name, "co") |
Pesan dengan atribut name dan nilai yang diawali dengan co |
NOT hasPrefix(attributes.name, "co") |
Pesan tanpa atribut name dan nilai yang diawali dengan co |
Operator perbandingan untuk ekspresi filter
Anda dapat memfilter atribut dengan operator perbandingan berikut:
:
=
!=
Operator :
cocok dengan kunci dalam daftar atribut.
attributes:KEY
Operator {i>equality<i} akan mencocokkan dengan kunci dan nilai. Nilainya harus berupa literal string.
attributes.KEY = "VALUE"
Ekspresi dengan operator kesetaraan harus dimulai dengan kunci, dan operator kesetaraan harus membandingkan kunci dengan nilai.
Valid: Filter membandingkan kunci dan nilai
attributes.name = "com"
Tidak valid: Sisi kiri filter berupa nilai
"com" = attributes.name
Tidak valid: Filter membandingkan dua kunci
attributes.name = attributes.website
Kunci dan nilai peka huruf besar/kecil dan harus sama persis dengan atribut. Jika kunci berisi karakter selain tanda hubung, garis bawah, atau karakter alfanumerik, gunakan literal string.
attributes."iana.org/language_tag" = "en"
Untuk menggunakan garis miring terbalik, tanda kutip, dan karakter yang tidak mencetak dalam filter, escape karakter dalam literal string. Anda juga dapat menggunakan urutan escape Unicode, heksadesimal, dan oktal dalam literal string.
Valid: Filter meng-escape karakter dalam literal string
attributes:"\u307F\u3093\u306A"
Tidak valid: Filter meng-escape karakter tanpa literal string
attributes:\u307F\u3093\u306A
Operator Boolean untuk ekspresi filter
Anda dapat menggunakan operator boolean AND
, NOT
, dan OR
dalam filter. Operator harus dalam huruf besar. Misalnya, filter
berikut ditujukan untuk pesan dengan atribut iana.org/language_tag
,
tetapi tanpa atribut name
dan nilai com
.
attributes:"iana.org/language_tag" AND NOT attributes.name = "com"
Operator NOT
memiliki prioritas tertinggi. Untuk menggabungkan operator AND
dan OR
, gunakan tanda kurung dan ekspresi lengkap.
Valid: operator
AND
danOR
dengan tanda kurungattributes:"iana.org/language_tag" AND (attributes.name = "net" OR attributes.name = "org")
Tidak valid: operator
AND
danOR
tanpa tanda kurungattributes:"iana.org/language_tag" AND attributes.name = "net" OR attributes.name = "org"
Tidak valid: operator
AND
danOR
menggabungkan ekspresi yang tidak lengkapattributes.name = "com" AND ("net" OR "org")
Anda juga dapat menggunakan operator minus unary sebagai ganti operator NOT
.
attributes.name = "com" AND -attributes:"iana.org/language_tag"
Fungsi untuk ekspresi filter
Anda dapat menggunakan fungsi hasPrefix
untuk memfilter atribut dengan nilai yang dimulai dengan substring. hasPrefix
adalah satu-satunya fungsi yang didukung dalam filter.
Meskipun pencocokan awalan didukung dengan fungsi hasPrefix
, ekspresi reguler umum tidak didukung.
hasPrefix(attributes.KEY, "SUBSTRING")
Ganti kode berikut:
- KEY: nama atribut
- SUBSTRING: substring nilai