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 merasa perlu memutar ulang pesan yang dikonfirmasi, misalnya, jika Anda melakukan konfirmasi yang salah. Kemudian, Anda dapat menggunakan fitur Seek untuk menandai pesan yang sebelumnya telah dikonfirmasi sebagai tidak terkonfirmasi, dan memaksa Pub/Sub mengirim ulang pesan tersebut. Anda juga dapat mencari untuk menghapus pesan yang tidak terkonfirmasi dengan mengubah statusnya menjadi dikonfirmasi.

Cari ke snapshot atau cari stempel waktu untuk memutar ulang pesan dalam langganan. Panduan ini menunjukkan contoh cara memutar ulang pesan Pub/Sub yang telah dikonfirmasi sebelumnya 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. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  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. Menginstal Google Cloud CLI.
  4. Untuk initialize gcloud CLI, jalankan perintah berikut:

    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. Menginstal Google Cloud CLI.
  7. Untuk initialize gcloud CLI, jalankan perintah berikut:

    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, termasuk semua Cloud API dan image Debian default. Cara termudah untuk membuatnya adalah melalui UI Compute Engine. Di bagian selanjutnya dari dokumen ini, kami akan mengasumsikan bahwa Anda menggunakan salah satu alat command line ini.

Untuk mengetahui informasi lebih lanjut cara menggunakan gcloud, lihat panduan memulai gcloud. Baca juga bagian gcloud pubsub di referensi gcloud untuk mengetahui daftar lengkap perintah gcloud Pub/Sub.

Membuat dan Mencari Snapshot

Buat topik dan langganan. Untuk interaktivitas yang lebih baik, gunakan batas waktu konfirmasi 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. Ambil 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 memungkinkan):

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

Anda dapat memulihkan pesan dengan mencari langganan ke snapshot. Perlu diperhatikan bahwa pesan mungkin tidak langsung dikirimkan: Pub/Sub tidak menjamin latensi pengiriman pesan. Namun, yang dijamin adalah bahwa pesan yang dipertahankan dalam snapshot pada akhirnya akan dikirim setidaknya satu kali:

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

Menarik dari seek-demo-sub2 sekarang akan menghasilkan pesan yang dipublikasikan sebelum seek-demo-sub2 dibuat:

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

Setelah selesai membuat snapshot, bersihkan:

gcloud pubsub snapshots delete my-snapshot

Cari ke stempel waktu

Cara lain untuk memutar ulang pesan yang telah dikonfirmasi adalah dengan mencari stempel waktu. Untuk mencari stempel waktu, Anda harus terlebih dahulu mengonfigurasi langganan untuk mempertahankan pesan yang dikonfirmasi menggunakan retain-acked-messages. Jika retain-acked-messages ditetapkan, Pub/Sub akan mempertahankan 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 seharusnya tidak menampilkan pesan:

gcloud pubsub subscriptions pull seek-demo-sub

Sekarang, cari kembali langganan ke masa lalu untuk memulihkan pesan. Perhatikan bahwa flag aritmetika tanggal berbeda antara versi GNU dan BSD (MacOS) dari perintah date:

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

Pull berikutnya akan menghasilkan pesan lagi:

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

Anda juga dapat menggunakan fitur cari untuk melewati pengiriman semua pesan yang dipublikasikan sebelum waktu tertentu, seperti waktu saat ini. Untuk melakukannya, cari langganan ke waktu saat ini untuk menandainya sebagai dikonfirmasi di semua pesan sebelumnya:

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 penerapan (~60 detik), pesan tidak akan lagi dikirimkan. Anda dapat memeriksanya dengan menjalankan perintah pull berulang kali tanpa mengonfirmasi pesannya:

gcloud pubsub subscriptions pull seek-demo-sub

Menggunakan Konsol Cloud

Anda dapat membuat snapshot, atau mencari snapshot yang ada, di halaman detail langganan Cloud Console. 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 Buat untuk menyimpannya.

Snapshot dapat dilihat di halaman snapshot pada Konsol Google Cloud. Anda juga dapat mengelola snapshot di halaman detail masing-masing topik.

Memutar ulang langganan

Dialog Replay messages 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 ringkasan yang akan dicari.

  5. Klik Cari untuk memutar ulang pesan.

Bagaimana hasilnya?

Perlu diperhatikan bahwa resource dan link tambahan tersedia di halaman dukungan Pub/Sub.

Langkah selanjutnya

Lihat Memutar ulang dan menghapus pesan.