Pelajari langkah-langkah pemecahan masalah yang mungkin berguna jika Anda mengalami masalah saat menggunakan Pub/Sub.
Tidak dapat membuat topik
Pastikan Anda memiliki
izin yang diperlukan.
Untuk membuat topik Pub/Sub, Anda memerlukan peran Identity and Access Management Pub/Sub Editor (roles/pubsub.editor
) di project. Jika Anda tidak memiliki peran ini, hubungi administrator.
Untuk informasi pemecahan masalah selengkapnya terkait topik, lihat halaman berikut:
Tidak dapat membuat langganan
Pastikan Anda telah melakukan hal berikut:
Pastikan Anda memiliki izin yang diperlukan. Untuk membuat langganan Pub/Sub, Anda memerlukan peran IAM Pub/Sub Editor (roles/pubsub.editor) di project. Jika Anda tidak memiliki peran ini, hubungi administrator.
Menentukan nama untuk langganan.
Menentukan nama topik yang sudah ada yang ingin Anda lampirkan langganannya.
Jika membuat langganan push, tentukan
https://
dalam huruf kecil (bukanhttp://
atauHTTPS://
) sebagai protokol untuk URL penerima Anda di kolompushEndpoint
.
Untuk informasi pemecahan masalah selengkapnya tentang langganan, lihat halaman berikut:
Memecahkan masalah izin
Izin Pub/Sub mengontrol pengguna dan akun layanan mana yang dapat melakukan tindakan pada resource Pub/Sub Anda. Jika izin salah dikonfigurasi, hal ini dapat menyebabkan error izin ditolak dan mengganggu alur pesan. Log audit memberikan catatan mendetail tentang semua perubahan izin, sehingga Anda dapat mengidentifikasi sumber masalah ini.
Untuk memecahkan masalah izin Pub/Sub dengan log audit:
Dapatkan izin yang diperlukan untuk melihat Logs Explorer.
Untuk mengetahui informasi selengkapnya, lihat Sebelum memulai.
Di konsol Google Cloud , buka halaman Logs Explorer.
Pilih project, folder, atau organisasi Google Cloud yang ada.
Berikut adalah daftar filter yang dapat Anda gunakan untuk menemukan log yang relevan:
resource.type="pubsub_topic" OR resource.type="pubsub_subscription"
: Gunakan kueri ini sebagai titik awal saat Anda memecahkan masalah yang mungkin melibatkan perubahan pada konfigurasi topik atau langganan, atau kontrol akses. Anda dapat menggabungkannya dengan filter lain untuk menyaring penelusuran lebih lanjut.protoPayload.methodName="google.iam.v1.SetIamPolicy"
: Gunakan kueri ini saat Anda mencurigai bahwa masalah disebabkan oleh izin yang salah atau tidak ada. Fitur ini membantu Anda melacak siapa yang membuat perubahan pada kebijakan IAM dan perubahan apa saja yang dilakukan. Hal ini dapat berguna untuk memecahkan masalah seperti pengguna yang tidak dapat memublikasikan ke topik atau berlangganan langganan, aplikasi yang ditolak aksesnya ke resource Pub/Sub, atau perubahan tak terduga pada kontrol akses.protoPayload.status.code=7
: Gunakan kueri ini saat Anda mengalami error yang secara eksplisit terkait dengan izin. Hal ini membantu Anda menentukan tindakan mana yang gagal dan siapa yang mencobanya. Anda dapat menggabungkan kueri ini dengan kueri sebelumnya untuk mengidentifikasi resource tertentu dan perubahan kebijakan IAM yang mungkin menyebabkan penolakan izin.
Analisis log untuk menentukan faktor-faktor seperti stempel waktu peristiwa, prinsipal yang melakukan perubahan, dan jenis perubahan yang dilakukan.
Berdasarkan informasi yang dikumpulkan dari log audit, Anda dapat mengambil tindakan perbaikan.
Langganan dihapus
Langganan Pub/Sub dapat dihapus dengan dua cara utama:
Pengguna atau akun layanan dengan izin yang memadai sengaja menghapus langganan.
Langganan akan otomatis dihapus setelah periode tidak aktif, yaitu 31 hari secara default. Untuk informasi selengkapnya tentang kebijakan masa berlaku langganan, lihat Periode habis masa berlaku.
Untuk memecahkan masalah langganan yang dihapus, lakukan langkah-langkah berikut:
Di konsol Google Cloud , buka halaman langganan Pub/Sub dan pastikan langganan tersebut tidak lagi tercantum. Untuk mengetahui informasi selengkapnya tentang cara mencantumkan langganan, lihat Mencantumkan langganan.
Periksa log audit. Buka Logs Explorer. Gunakan filter
protoPayload.methodName="google.pubsub.v1.Subscriber.DeleteSubscription"
untuk menemukan subscription yang dihapus. Periksa log untuk menentukan apakah seseorang menghapus langganan atau langganan dihapus karena tidak ada aktivitas.InternalExpireInactiveSubscription
menunjukkan bahwa langganan telah dihapus karena tidak aktif. Untuk informasi selengkapnya tentang cara menggunakan log audit untuk pemecahan masalah, lihat Memecahkan masalah Pub/Sub dengan log audit.
403 (Forbidden)
error
Jika Anda mendapatkan 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
{PROJECT_NUMBER}@cloudservices.gserviceaccount.com
dan akun Layanan Compute Engine{PROJECT_NUMBER}-compute@developer.gserviceaccount.com
memiliki izin yang diperlukan pada resource Pub/Sub API yang relevan. Untuk mengetahui informasi selengkapnya, lihat Keamanan dan Izin Dataflow.Jika Anda menggunakan App Engine, periksa halaman Izin project untuk melihat apakah Akun Layanan App Engine tercantum sebagai Editor Pub/Sub. Jika belum, tambahkan Akun Layanan App Engine Anda sebagai Editor Pub/Sub. Biasanya, Akun Layanan App Engine memiliki format
<project-id>@appspot.gserviceaccount.com
.
Kode error umum lainnya
Untuk mengetahui daftar kode error umum lainnya yang terkait dengan Pub/Sub API dan deskripsinya, lihat Kode Error.
Menggunakan operasi administratif yang berlebihan
Jika Anda mendapati bahwa 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
adalah operasi administrator:
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 yakin dengan nama langganan). 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
}
Anda dapat menggunakan contoh kode berikut untuk menerapkan pola ini dalam bahasa pilihan Anda:
Go
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di panduan memulai Pub/Sub menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Go Pub/Sub.
Untuk melakukan autentikasi ke Pub/Sub, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Java
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di panduan memulai Pub/Sub menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Java Pub/Sub.
Untuk melakukan autentikasi ke Pub/Sub, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Node.js
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di panduan memulai Pub/Sub menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Node.js Pub/Sub.
Untuk melakukan autentikasi ke Pub/Sub, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Python
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di panduan memulai Pub/Sub menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Pub/Sub.
Untuk melakukan autentikasi ke Pub/Sub, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
C++
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan C++ di panduan memulai Pub/Sub menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API C++ Pub/Sub.
Untuk melakukan autentikasi ke Pub/Sub, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Node.js (TypeScript)
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di panduan memulai Pub/Sub menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Node.js Pub/Sub.
Untuk melakukan autentikasi ke Pub/Sub, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.