Pelajari langkah-langkah pemecahan masalah yang mungkin berguna jika Anda mengalami masalah saat menggunakan Pub/Sub.
Tidak dapat membuat langganan
Pastikan Anda telah melakukan hal berikut:
- Menentukan nama langganan di kolom
name
. Untuk versi v1beta2 dan yang lebih baru, nama langganan harus dalam formatprojects/project-identifier/subscriptions/subscription-name
. - Cantumkan nama topik yang sudah ada tempat Anda ingin berlangganan, di kolom
topic
. Untuk versi v1beta2 dan yang lebih baru, nama topik harus dalam formatprojects/project-identifier/topics/topic-name
. - Menentukan
https://
dalam huruf kecil (bukanhttp://
atauHTTPS://
) sebagai protokol untuk URL penerima di kolompushEndpoint
.
403 (Forbidden)
error
Jika Anda menerima pesan error ini, lakukan hal berikut:
- Pastikan Anda telah mengaktifkan Pub/Sub API di Konsol Google Cloud.
- Pastikan akun utama yang membuat permintaan memiliki izin yang diperlukan pada resource Pub/Sub API yang relevan, terutama jika Anda menggunakan Pub/Sub API untuk komunikasi lintas project.
- Jika Anda menggunakan Dataflow, pastikan
<projectId>@cloudservices.gserviceaccount.com
dan akun Layanan Compute Engine<projectId>-compute@developer.gserviceaccount.com
memiliki izin yang diperlukan pada resource Pub/Sub API yang relevan. Lihat Keamanan dan Izin Dataflow untuk mengetahui informasi selengkapnya. - Jika Anda menggunakan App Engine, periksa halaman Izin project untuk melihat apakah Akun Layanan App Engine tercantum sebagai Editor atau tidak. Jika tidak, tambahkan Akun Layanan App Engine Anda sebagai Editor. Biasanya, Akun Layanan App Engine memiliki format
<project-id>@appspot.gserviceaccount.com
.
Menangani duplikat dan memaksa percobaan ulang
Jika Anda tidak mengonfirmasi pesan sebelum batas waktu konfirmasi habis masa berlakunya, Pub/Sub akan mengirim ulang pesan tersebut. Akibatnya, Pub/Sub dapat
mengirim pesan duplikat. Gunakan Cloud Monitoring untuk memantau operasi dengan kode respons expired
guna mendeteksi kondisi ini. Untuk mendapatkan data ini, pilih metrik subscription/expired_ack_deadlines_count
.
Untuk mengurangi rasio duplikasi, perpanjang batas waktu pesan.
- Library klien otomatis menangani perpanjangan batas waktu, tetapi perlu diperhatikan bahwa ada batas default untuk batas waktu perpanjangan maksimum yang dapat dikonfigurasi.
- Jika Anda membuat library klien sendiri, gunakan metode
modifyAckDeadline
untuk memperpanjang batas waktu konfirmasi.
Atau, untuk memaksa Pub/Sub mencoba kembali pesan, tetapkan modifyAckDeadline
ke 0.
Menggunakan operasi administratif yang berlebihan
Jika ternyata Anda menggunakan terlalu banyak kuota untuk
operasi administratif, Anda mungkin perlu memfaktorkan ulang kode. Sebagai ilustrasi, pertimbangkan
kode pseudo ini. Dalam contoh ini, operasi administratif (GET
) digunakan untuk memeriksa keberadaan langganan sebelum mencoba menggunakan resource-nya. GET
dan CREATE
merupakan operasi admin:
if !GetSubscription my-sub { CreateSubscription my-sub } Consume from subscription my-sub
Pola yang lebih efisien adalah mencoba menggunakan pesan dari langganan (dengan asumsi bahwa Anda dapat cukup yakin dengan nama langganannya). Dalam pendekatan optimis ini, Anda hanya mendapatkan atau membuat langganan jika terjadi error. Perhatikan contoh berikut:
try { Consume from subscription my-sub } catch NotFoundError { CreateSubscription my-sub Consume from subscription my-sub }