Membangun sistem Pub/Sub one-to-many

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

  • Membuat aplikasi lebih andal
  • Dapat menyederhanakan pengembangan

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

Ringkasan sistem

Dalam tutorial ini, Anda akan memulai aplikasi penerbit yang mengirim pesan "Hello, World!" ke dua pelanggan menggunakan komunikasi satu-ke-banyak, seperti yang diilustrasikan dalam diagram berikut:

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

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

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

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. Instal Google Cloud CLI.

  3. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  4. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  5. Buat atau pilih Google Cloud project.

    Peran yang diperlukan untuk memilih atau membuat project

    • Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
    • Membuat project: Untuk membuat project, Anda memerlukan peran Pembuat Project (roles/resourcemanager.projectCreator), yang berisi izin resourcemanager.projects.create. Pelajari cara memberikan peran.
    • Buat Google Cloud project:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk Google Cloud project 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.

  6. Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.

  7. Aktifkan Pub/Sub API:

    Peran yang diperlukan untuk mengaktifkan API

    Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (roles/serviceusage.serviceUsageAdmin), yang berisi izin serviceusage.services.enable. Pelajari cara memberikan peran.

    gcloud services enable pubsub.googleapis.com
  8. Buat kredensial autentikasi lokal untuk akun pengguna Anda:

    gcloud auth application-default login

    Jika error autentikasi ditampilkan, dan Anda menggunakan penyedia identitas (IdP) eksternal, konfirmasi bahwa Anda telah login ke gcloud CLI dengan identitas gabungan Anda.

  9. Memberikan peran ke akun pengguna Anda. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut: roles/pubsub.publisher, roles/pubsub.subscriber

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Ganti kode berikut:

    • PROJECT_ID: Project ID Anda.
    • USER_IDENTIFIER: ID untuk akun pengguna Anda. Misalnya, myemail@example.com.
    • ROLE: Peran IAM yang Anda berikan ke akun pengguna Anda.
  10. Instal Google Cloud CLI.

  11. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  12. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  13. Buat atau pilih Google Cloud project.

    Peran yang diperlukan untuk memilih atau membuat project

    • Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
    • Membuat project: Untuk membuat project, Anda memerlukan peran Pembuat Project (roles/resourcemanager.projectCreator), yang berisi izin resourcemanager.projects.create. Pelajari cara memberikan peran.
    • Buat Google Cloud project:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk Google Cloud project 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.

  14. Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.

  15. Aktifkan Pub/Sub API:

    Peran yang diperlukan untuk mengaktifkan API

    Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (roles/serviceusage.serviceUsageAdmin), yang berisi izin serviceusage.services.enable. Pelajari cara memberikan peran.

    gcloud services enable pubsub.googleapis.com
  16. Buat kredensial autentikasi lokal untuk akun pengguna Anda:

    gcloud auth application-default login

    Jika error autentikasi ditampilkan, dan Anda menggunakan penyedia identitas (IdP) eksternal, konfirmasi bahwa Anda telah login ke gcloud CLI dengan identitas gabungan Anda.

  17. Memberikan peran ke akun pengguna Anda. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut: roles/pubsub.publisher, roles/pubsub.subscriber

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Ganti kode berikut:

    • PROJECT_ID: Project ID Anda.
    • USER_IDENTIFIER: ID untuk akun pengguna Anda. Misalnya, myemail@example.com.
    • ROLE: Peran IAM yang Anda berikan ke akun pengguna Anda.

Menginstal Python

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

Menyiapkan project Pub/Sub

Untuk mengelola alur pesan antara aplikasi penerbit dan pelanggan, Anda 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 publisher dan subscriber

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

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

Siapkan tiga terminal

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

    • Terminal penayang
    • 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 (pyenv-qs) $ berikut.

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

    python -m pip install --upgrade google-cloud-pubsub
  4. Di ketiga terminal, 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 aplikasi 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 mengirimkan pesan melalui stream.

Aplikasi Subscriber 1
  mulai memproses pesan di langganan sub_one.

Mulai aplikasi Publisher

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 langganan yang ada. Server juga menetapkan ID pesan.

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

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

Pub/Sub menghapus pesan dari sub_one.

Aplikasi Publisher
  memublikasikan pesan dan menetapkan ID pesan. Aplikasi Subscriber 1
  menerima pesan 'Hello World' dan mengirim
  konfirmasi

Mulai aplikasi Subscriber 2

Di terminal sub_two, mulai Subscriber 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 Subscriber 2 tidak dimulai hingga setelah Publisher mengirim pesan ke topik dan langganan. Jika Publisher memanggil Subscriber 2 secara langsung, aplikasi publikasi harus menunggu hingga Subscriber 2 muncul atau akan kehabisan waktu. Pub/Sub mengelola proses ini dengan menyimpan pesan secara efektif untuk Subscriber 2.

Subscriber 2
  mulai memproses dan menerima pesan yang menunggunya di
  sub_two

Sekarang Anda siap mengembangkan aplikasi 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. Hapus langganan.

    gcloud pubsub subscriptions delete sub_one
    gcloud pubsub subscriptions delete sub_two
  5. Tutup project tutorial di bagian IAM & admin di konsol Google Cloud .

  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 berikutnya

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 setempat setiap detik.

  • Pelajari cara mengelompokkan pesan.

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

  • Mengambil pesan yang sebelumnya dikonfirmasi menggunakan replay. Secara default, Pub/Sub menghapus pesan yang dikonfirmasi dari langganan. Misalnya, dalam tutorial ini, Anda tidak akan dapat menjalankan kembali sub.py untuk menerima pesan "Hello, World!" lagi. Fitur pemutaran ulang memungkinkan Anda menyiapkan langganan sehingga Anda dapat menerima pesan setelah pesan tersebut dikonfirmasi.

  • Mulai menggunakan library klien dalam bahasa lain.