Pelajari langkah-langkah pemecahan masalah yang mungkin berguna jika Anda mengalami masalah saat menggunakan Pub/Sub.
Tidak dapat membuat topik
Verifikasi bahwa Anda memiliki
izin yang diperlukan.
Untuk membuat topik Pub/Sub, Anda memerlukan peran
Pub/Sub Editor (roles/pubsub.editor
) Identity and Access Management
di project. Jika Anda tidak memiliki peran ini, hubungi administrator Anda.
Untuk mengetahui informasi pemecahan masalah selengkapnya terkait topik, lihat halaman berikut:
Tidak dapat membuat langganan
Pastikan Anda telah melakukan hal berikut:
Verifikasi bahwa 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 Anda.
Menentukan nama untuk langganan.
Menentukan nama topik yang sudah ada yang ingin Anda lampirkan ke langganan.
Jika membuat langganan push, tentukan
https://
dalam huruf kecil (bukanhttp://
atauHTTPS://
) sebagai protokol untuk URL penerima Anda di kolompushEndpoint
.
Untuk mengetahui informasi pemecahan masalah selengkapnya tentang langganan, lihat halaman berikut:
Memecahkan masalah penarikan, pengiriman, BigQuery, atau Cloud Storage
Memecahkan masalah langganan dengan Transformasi Pesan Tunggal
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 sudah 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 apa pun yang mungkin melibatkan perubahan pada konfigurasi topik atau langganan, atau kontrol akses. Anda dapat menggabungkannya dengan filter lain untuk lebih mempersempit penelusuran.protoPayload.methodName="google.iam.v1.SetIamPolicy"
: Gunakan kueri ini jika Anda menduga bahwa masalah disebabkan oleh izin yang salah atau tidak ada. Hal ini membantu Anda melacak siapa yang membuat perubahan pada kebijakan IAM dan apa saja perubahan tersebut. Hal ini dapat berguna untuk memecahkan masalah seperti pengguna yang tidak dapat memublikasikan ke topik atau berlangganan, aplikasi yang ditolak aksesnya ke resource Pub/Sub, atau perubahan tak terduga dalam 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 mencoba melakukannya. Anda dapat menggabungkan kueri ini dengan kueri sebelumnya untuk mengidentifikasi perubahan kebijakan IAM dan resource tertentu yang mungkin menyebabkan penolakan izin.
Analisis log untuk menentukan faktor-faktor seperti stempel waktu peristiwa, akun utama yang melakukan perubahan, dan jenis perubahan yang dilakukan.
Berdasarkan informasi yang dikumpulkan dari log audit, Anda dapat mengambil tindakan korektif.
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 tidak aktif selama beberapa waktu, yaitu 31 hari secara default. Untuk mengetahui informasi selengkapnya tentang kebijakan masa berlaku langganan, lihat Periode masa berlaku.
Untuk memecahkan masalah langganan yang dihapus, lakukan langkah-langkah berikut:
Di konsol Google Cloud , buka halaman Pub/Sub subscriptions dan pastikan langganan 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 langganan 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 mengetahui informasi selengkapnya tentang cara menggunakan log audit untuk memecahkan masalah, lihat Memecahkan masalah Pub/Sub dengan log audit.
403 (Forbidden)
error
Error 403 biasanya berarti Anda tidak memiliki izin yang benar untuk
melakukan tindakan. Misalnya, Anda mungkin mendapatkan error 403 User not authorized
saat mencoba memublikasikan ke topik atau menarik dari langganan.
Jika Anda mendapatkan error ini, lakukan hal berikut:
- Pastikan Anda telah mengaktifkan Pub/Sub API di konsol Google Cloud .
Pastikan bahwa prinsipal 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 Anda untuk melihat apakah Akun Layanan App Engine tercantum sebagai Editor Pub/Sub. Jika tidak, tambahkan Akun Layanan App Engine Anda sebagai Editor Pub/Sub. Biasanya, Akun Layanan App Engine memiliki bentuk
<project-id>@appspot.gserviceaccount.com
.Anda dapat menggunakan log audit untuk memecahkan masalah izin.
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 Anda. Sebagai ilustrasi, pertimbangkan
kode semu ini. Dalam contoh ini, operasi administratif (GET
)
digunakan untuk memeriksa keberadaan langganan sebelum
mencoba menggunakan sumber dayanya. 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 cukup yakin dengan nama langganan). Dalam pendekatan yang 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:
Contoh berikut menggunakan library klien Go Pub/Sub versi utama (v2). Jika Anda masih menggunakan library v1, lihat panduan migrasi ke v2. Untuk melihat daftar contoh kode v1, lihat contoh kode yang tidak digunakan lagi.
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.
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Pub/Sub Java API.
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Node.js Pub/Sub.
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Node.js Pub/Sub.
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.
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan C++ di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Pub/Sub C++ API.