Memutar ulang pesan di Pub/Sub dengan mencari snapshot atau stempel waktu

Pub/Sub tidak dapat mengambil pesan setelah Anda mengonfirmasinya. Namun, terkadang Anda mungkin perlu memutar ulang pesan yang direspons, misalnya, jika Anda melakukan respons yang salah. Kemudian, Anda dapat menggunakan fitur Cari untuk menandai pesan yang sebelumnya dikonfirmasi sebagai tidak dikonfirmasi, dan memaksa Pub/Sub untuk mengirim ulang pesan tersebut. Anda juga dapat menggunakan pencarian untuk menghapus pesan yang tidak direspons dengan mengubah statusnya menjadi direspons.

Cari snapshot atau cari stempel waktu untuk memutar ulang pesan dalam langganan. Panduan ini menunjukkan contoh cara memutar ulang pesan Pub/Sub yang sebelumnya diakui menggunakan pencarian.


Jika ingin mengikuti panduan langkah demi langkah untuk tugas ini langsung di Konsol Google Cloud, klik Pandu saya:

Pandu saya


Sebelum memulai

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Set up a Google Cloud console project.

    Set up a project

    Click to:

    • Create or select a project.
    • Enable the Pub/Sub API for that project.

    You can view and manage these resources at any time in the Google Cloud console.

  3. Install the Google Cloud CLI.
  4. To initialize the gcloud CLI, run the following command:

    gcloud init
  5. Set up a Google Cloud console project.

    Set up a project

    Click to:

    • Create or select a project.
    • Enable the Pub/Sub API for that project.

    You can view and manage these resources at any time in the Google Cloud console.

  6. Install the Google Cloud CLI.
  7. To initialize the gcloud CLI, run the following command:

    gcloud init

Menggunakan Antarmuka Command Line gcloud

Cara termudah untuk menggunakan gcloud adalah di Cloud Shell . Anda juga dapat menggunakan alat command line yang disertakan dengan Google Cloud CLI. Prasyarat penyiapan terpenuhi secara otomatis untuk gcloud CLI jika Anda membuat instance mesin Compute Engine baru dengan cakupan akses yang mencakup semua Cloud API dan image Debian default. Cara termudah untuk membuatnya adalah melalui UI Compute Engine. Untuk bagian selanjutnya dalam dokumen ini, kami akan mengasumsikan bahwa Anda menggunakan salah satu alat command line ini.

Untuk mengetahui informasi selengkapnya tentang penggunaan gcloud, lihat panduan memulai gcloud. Lihat juga bagian gcloud pubsub di referensi gcloud untuk mengetahui daftar lengkap perintah gcloud Pub/Sub.

Membuat dan Memutar ke Snapshot

Buat topik dan langganan. Untuk interaktivitas yang lebih baik, gunakan batas waktu respons yang singkat:

gcloud pubsub topics create seek-demo-topic
gcloud pubsub subscriptions create seek-demo-sub --topic=seek-demo-topic --ack-deadline=10

Sejauh ini, tidak ada pesan dalam langganan yang dikonfirmasi. Rekam status ini dengan membuat snapshot:

gcloud pubsub snapshots create my-snapshot --subscription=seek-demo-sub
gcloud pubsub snapshots list

Sekarang publikasikan, tarik, dan konfirmasi pesan:

gcloud pubsub topics publish seek-demo-topic --message 'hello, world'
gcloud pubsub subscriptions pull --auto-ack seek-demo-sub

Perhatikan bahwa pull berikutnya tidak menghasilkan pesan baru (beberapa duplikat sementara mungkin terjadi):

gcloud pubsub subscriptions pull --auto-ack seek-demo-sub

Anda dapat memulihkan pesan dengan mencari langganan ke snapshot. Perhatikan bahwa pesan mungkin tidak dikirim secara instan: Pub/Sub tidak menjamin latensi pengiriman pesan. Namun, yang dijamin adalah pesan yang disimpan dalam snapshot pada akhirnya akan dikirim setidaknya sekali:

gcloud pubsub subscriptions seek seek-demo-sub --snapshot=my-snapshot
gcloud pubsub subscriptions pull seek-demo-sub --auto-ack

Perhatikan bahwa Anda dapat mencari langganan lain ke snapshot yang sama, selama topik langganan sama dengan topik snapshot:

gcloud pubsub subscriptions create seek-demo-sub2 --topic=seek-demo-topic --ack-deadline=10
gcloud pubsub subscriptions seek seek-demo-sub2 --snapshot=my-snapshot

Mengambil dari seek-demo-sub2 kini akan menghasilkan pesan yang dipublikasikan sebelum seek-demo-sub2 dibuat:

gcloud pubsub subscriptions pull seek-demo-sub2 --auto-ack

Setelah selesai menggunakan snapshot, bersihkan:

gcloud pubsub snapshots delete my-snapshot

Mencari stempel waktu

Cara lain untuk memutar ulang pesan yang telah dikonfirmasi adalah dengan mencari stempel waktu. Untuk mencari stempel waktu, Anda harus mengonfigurasi langganan terlebih dahulu untuk mempertahankan pesan yang diakui menggunakan retain-acked-messages. Jika retain-acked-messages ditetapkan, Pub/Sub akan menyimpan pesan yang dikonfirmasi selama 7 hari.

Anda hanya perlu melakukan langkah ini jika ingin mencari stempel waktu, bukan snapshot.

gcloud pubsub subscriptions update seek-demo-sub --retain-acked-messages

Sekarang publikasikan, tarik, dan konfirmasi pesan:

gcloud pubsub topics publish seek-demo-topic --message 'hello, world'
gcloud pubsub subscriptions pull --auto-ack seek-demo-sub

Pull berikutnya tidak akan menampilkan pesan:

gcloud pubsub subscriptions pull seek-demo-sub

Sekarang, cari langganan kembali ke waktu yang tepat untuk memulihkan pesan. Perhatikan bahwa flag aritmetika tanggal berbeda antara versi perintah tanggal GNU dan BSD (MacOS):

export TS_FORMAT=%Y-%m-%dT%H:%M:%SZ
gcloud pubsub subscriptions seek seek-demo-sub --time=$(date -u -d '-10 min' +$TS_FORMAT)

Untuk mengetahui informasi selengkapnya tentang format waktu yang didukung, lihat tanggal dan waktu topik gcloud.

Pull berikutnya akan menampilkan pesan lagi:

gcloud pubsub subscriptions pull --auto-ack seek-demo-sub

Anda juga dapat menggunakan pencarian untuk melewati pengiriman semua pesan yang dipublikasikan sebelum waktu tertentu, seperti waktu saat ini. Untuk melakukannya, cari langganan ke waktu saat ini untuk menandai semua pesan sebelumnya sebagai ditanggapi:

gcloud pubsub topics publish seek-demo-topic --message 'hello, world'
gcloud pubsub subscriptions seek seek-demo-sub --time=$(date -u +$TS_FORMAT)

Setelah beberapa penundaan propagasi (~60 detik), pesan tidak akan lagi dikirim. Anda dapat memeriksanya dengan berulang kali menjalankan perintah pull tanpa mengonfirmasi pesan:

gcloud pubsub subscriptions pull seek-demo-sub

Menggunakan Cloud Console

Anda dapat membuat snapshot, atau mencari snapshot yang ada, di halaman detail langganan Konsol Cloud. Untuk aturan penamaan snapshot, lihat Nama resource.

Membuat snapshot

  1. Di konsol Google Cloud, buka halaman Langganan Pub/Sub.

    Buka halaman langganan

  2. Pilih langganan dari daftar.

  3. Klik Create snapshot.

  4. Masukkan ID untuk snapshot, lalu klik Create untuk menyimpan.

Snapshot dapat dilihat di halaman snapshot di konsol Google Cloud. Anda juga dapat mengelola snapshot di halaman detail setiap topik.

Memutar ulang langganan

Dialog Putar ulang pesan memungkinkan Anda mencari ke titik waktu sebelumnya atau snapshot yang disimpan. Untuk membuka dialog:

  1. Di konsol Google Cloud, buka halaman Langganan Pub/Sub.

    Buka halaman langganan

  2. Pilih langganan dari daftar.

  3. Klik Putar ulang pesan.

  4. Di bagian Cari, pilih Ke titik waktu sebelumnya atau Ke snapshot, lalu pilih titik waktu atau snapshot yang akan dicari.

  5. Klik Cari untuk memutar ulang pesan.

Bagaimana hasilnya?

Perhatikan bahwa referensi dan link tambahan tersedia di halaman dukungan Pub/Sub.

Langkah selanjutnya

Lihat Memutar ulang dan menghapus pesan.