Membangun sistem Pub/Sub one-to-many

Tutorial ini memandu Anda menyiapkan sekumpulan aplikasi yang berkomunikasi dengan mengirim pesan melalui Pub/Sub, bukan RPC sinkron. Dengan memisahkan aplikasi, pesan:

  • Membuat aplikasi lebih tangguh
  • Mungkin menyederhanakan pengembangan

Misalnya, pemanggil (penayang) tidak memerlukan penerima (pelanggan) aktif dan tersedia. Ia hanya mengirim pesan ke Pub/Sub. Penerbit juga tidak perlu mengetahui aplikasi pelanggan mana dan berapa banyak yang perlu menerima pesan tersebut. Hasilnya, layanan tersebut dapat diandalkan untuk mengirimkan pesan ke satu atau beberapa aplikasi pelanggan setiap kali tersedia.

Ringkasan sistem

Dalam tutorial ini, Anda akan memulai aplikasi penayang yang mengirimkan pesan "Halo Dunia!" ke dua pelanggan menggunakan komunikasi one-to-many, seperti yang diilustrasikan dalam diagram berikut:

Diagram
  topik, langganan yang terpasang, serta aplikasi penerbit dan pelanggan
  yang mengirim pesan ke dan menerima pesan dari Cloud
  Pub/Sub

Kedua aplikasi pelanggan tersebut menggunakan kode yang sama, tetapi Anda memulainya pada waktu yang berbeda. Proses ini menunjukkan cara Pub/Sub memungkinkan komunikasi asinkron. Untuk membangun sistem ini, selesaikan langkah-langkah berikut:

  1. Buat akun layanan IAM yang digunakan aplikasi untuk autentikasi.
  2. Menyiapkan izin IAM.
  3. Membuat topik Pub/Sub dan langganan.
  4. Mulai tiga permohonan independen: satu penerbit dan dua pelanggan.

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. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Buat atau pilih project Google Cloud.

    • Membuat project Google Cloud:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk project Google Cloud yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Aktifkan API Pub/Sub:

    gcloud services enable pubsub.googleapis.com
  7. Buat kredensial autentikasi lokal untuk Akun Google Anda:

    gcloud auth application-default login
  8. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/pubsub.publisher, roles/pubsub.subscriber

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
    • Replace PROJECT_ID with your project ID.
    • Replace USER_IDENTIFIER with the identifier for your user account. For example, user:myemail@example.com.

    • Replace ROLE with each individual role.
  9. Install the Google Cloud CLI.
  10. To initialize the gcloud CLI, run the following command:

    gcloud init
  11. Buat atau pilih project Google Cloud.

    • Membuat project Google Cloud:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk project Google Cloud yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  12. Make sure that billing is enabled for your Google Cloud project.

  13. Aktifkan API Pub/Sub:

    gcloud services enable pubsub.googleapis.com
  14. Buat kredensial autentikasi lokal untuk Akun Google Anda:

    gcloud auth application-default login
  15. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/pubsub.publisher, roles/pubsub.subscriber

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
    • Replace PROJECT_ID with your project ID.
    • Replace USER_IDENTIFIER with the identifier for your user account. For example, user:myemail@example.com.

    • Replace ROLE with each individual role.

Instal Python

Tutorial ini menggunakan Library Klien Pub/Sub, yang memerlukan Python 3.7 atau versi yang lebih tinggi. Selesaikan petunjuk untuk menginstal Python.

Menyiapkan project Pub/Sub

Untuk mengelola alur pesan antara aplikasi memublikasikan dan berlangganan, Anda harus membuat topik dan dua langganan yang berbeda.

Membuat topik Pub/Sub

Buat topik dengan ID hello_topic:

gcloud pubsub topics create hello_topic

Membuat langganan Pub/Sub

Buat dua langganan dan lampirkan ke topik Anda.

Langganan ini adalah langganan StreamingPull, yang merupakan jenis langganan pull.

Langganan 1

Buat langganan dengan ID sub_one dan lampirkan ke hello_topic.

gcloud pubsub subscriptions create sub_one --topic=hello_topic

Langganan 2

Buat langganan dengan ID sub_two dan lampirkan ke hello_topic.

gcloud pubsub subscriptions create sub_two --topic=hello_topic

Membangun sistem one-to-many

Mendownload kode penayang dan pelanggan

  1. Download file Pub/Sub Python yang diperlukan untuk tutorial ini.

     git clone https://github.com/googleapis/python-pubsub.git
    
  2. Tutup terminal yang terbuka sebelum melanjutkan.

Menyiapkan tiga terminal

  1. Mulai satu terminal untuk setiap aplikasi tutorial (satu penerbit dan dua pelanggan). Untuk memudahkan, tutorial ini memanggil terminal berikut:

    • terminal publisher
    • Terminal sub_one
    • Terminal sub_two
  2. Di terminal publisher, buat dan aktifkan lingkungan virtual Python bernama pyenv-qs.

    Bash

    python -m venv pyenv-qs
    source pyenv-qs/bin/activate
    

    PowerShell

    py -m venv pyenv-qs
    .\pyenv-qs\Scripts\activate
    

    Di terminal sub_one dan sub_two, jalankan perintah berikut:

    Bash

    source pyenv-qs/bin/activate
    

    PowerShell

    .\pyenv-qs\Scripts\activate
    

    Setelah Anda menjalankan perintah Activate, command prompt Anda akan menyertakan nilai berikut (pyenv-qs) $.

  3. Di terminal publisher, instal library klien Pub/Sub Python menggunakan pip:

    python -m pip install --upgrade google-cloud-pubsub
  4. Di ketiga terminal tersebut, siapkan variabel lingkungan dengan project ID Anda saat ini. Perintah gcloud ini menentukan project ID yang Anda pilih dan menetapkannya sebagai variabel:

    Bash

    export PROJECT=`gcloud config get-value project`
    

    PowerShell

    $env:PROJECT=$(gcloud config get-value project)
    
  5. Di ketiga terminal, ubah ke jalur project yang berisi kode contoh.

    cd python-pubsub/samples/snippets/quickstart/
    

Mulai aplikasi dan amati alur pesan

Mulai pendaftaran Subscriber 1

Di terminal sub_one, mulai Subscriber 1:

Bash

python sub.py $PROJECT sub_one

PowerShell

py sub.py $env:PROJECT sub_one

Setelah dimulai, aplikasi ini akan membuka koneksi streaming dua arah dengan server. Pub/Sub mengirim pesan melalui streaming.

Aplikasi pelanggan 1 mulai memproses pesan pada langganan sub_one.

Memulai aplikasi Penayang

Di terminal publisher, mulai aplikasi Publisher:

Bash

python pub.py $PROJECT hello_topic

PowerShell

py pub.py $env:PROJECT hello_topic

Setelah aplikasi penayang dimulai, sistem Pub/Sub akan melakukan hal berikut:

  • Aplikasi Publisher mengirim pesan "Hello, World!" ke Pub/Sub, tanpa mengetahui adanya langganan yang ada. Server juga menetapkan ID pesan.

  • Aplikasi Subscriber 1 menerima pesan 'Hello World', mencetaknya, dan mengirim konfirmasi ke Pub/Sub.

  • Aplikasi Publisher mencetak konfirmasi. Konfirmasi tersebut memberi tahu Pub/Sub bahwa pesan telah berhasil diproses dan tidak perlu dikirim ulang ke pelanggan ini atau pelanggan sub_one lainnya.

Pub/Sub menghapus pesan dari sub_one.

Aplikasi
  penayang memublikasikan pesan dan menetapkan ID pesan. Aplikasi Subscriber 1 menerima pesan 'Hello World' dan mengirimkan
 pengakuan

Mulai permohonan Subscriber 2

Di terminal sub_two, mulai Pelanggan 2:

Bash

python sub.py $PROJECT sub_two

PowerShell

py sub.py $env:PROJECT sub_two

Pelanggan ini menerima pesan yang dikirim ke langganan sub_two. Subscriber 2 menggunakan kembali skrip sub.py. Perbedaannya adalah Pelanggan 2 tidak dimulai hingga Penayang telah mengirim pesan ke topik dan langganan. Jika Publisher memanggil Subscriber 2 secara langsung, aplikasi publikasi harus menunggu hingga Subscriber 2 muncul atau waktu tunggu harus habis. Pub/Sub mengelola proses ini dengan menyimpan pesan secara efektif untuk Subscriber 2.

Pelanggan 2 mulai memproses dan menerima pesan yang menunggunya di sub_two

Kini Anda siap melakukan pengembangan dengan Pub/Sub.

Bagaimana hasilnya?

Referensi dan link tambahan tersedia di halaman dukungan Pub/Sub.

Pembersihan

  1. Hentikan semua aplikasi yang sedang berjalan.
  2. Hapus direktori kode contoh dari lingkungan lokal Anda.
  3. Hapus topik.

    gcloud pubsub topics delete hello_topic
    
  4. Menghapus langganan.

    gcloud pubsub subscriptions delete sub_one
    
    gcloud pubsub subscriptions delete sub_two
    
  5. Hentikan project tutorial di bagian IAM & admin pada Google Cloud Console.

  6. Opsional: Cabut kredensial autentikasi yang Anda buat, dan hapus file kredensial lokal.

    gcloud auth application-default revoke
  7. Opsional: Cabut kredensial dari gcloud CLI.

    gcloud auth revoke

Langkah selanjutnya

Berikut beberapa hal yang dapat Anda coba:

  • Periksa kode pub.py dan sub.py tutorial lalu jelajahi contoh Pub/Sub lainnya di GitHub. Sebagai latihan, buat versi pub.py yang memublikasikan waktu lokal setiap detik.

  • Pelajari cara mengelompokkan pesan.

  • Dengan menggunakan langganan Push, terima pesan yang memicu endpoint App Engine atau Cloud Functions.

  • Ambil pesan yang dikonfirmasi sebelumnya menggunakan replay. Secara default, Pub/Sub menghapus pesan yang dikonfirmasi dari langganan. Dalam tutorial ini, misalnya, Anda tidak akan dapat menjalankan ulang sub.py untuk menerima pesan "Hello, World!" (Halo Dunia!) lagi. Fitur replay memungkinkan Anda menyiapkan langganan sehingga Anda dapat menerima pesan setelah dikonfirmasi.

  • Mulai menggunakan library klien dalam bahasa lain.