Pemecahan masalah

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 format projects/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 format projects/project-identifier/topics/topic-name.
  • Menentukan https:// dalam huruf kecil (bukan http:// atau HTTPS://) sebagai protokol untuk URL penerima di kolom pushEndpoint.

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.

Menggunakan Cloud Monitoring untuk mencari batas waktu konfirmasi pesan yang telah habis masa berlakunya

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
    }