Tutorial ini akan memandu Anda menyiapkan serangkaian aplikasi yang berkomunikasi dengan mengirimkan pesan melalui Pub/Sub, bukan RPC sinkron. Dengan memisahkan aplikasi, fitur pesan:
- Membuat aplikasi lebih andal
- Dapat menyederhanakan pengembangan
Misalnya, pemanggil (penayang) tidak perlu penerima (pelanggan) 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 ini dapat diandalkan untuk mengirim pesan ke satu atau beberapa aplikasi pelanggan setiap kali tersedia.
Ringkasan sistem
Dalam tutorial ini, Anda akan memulai aplikasi penayang yang mengirim pesan "Halo, Dunia!" ke dua pelanggan menggunakan komunikasi satu ke banyak, seperti yang diilustrasikan dalam diagram berikut:
Kedua aplikasi subscriber menggunakan kode yang sama, tetapi Anda memulainya pada waktu yang berbeda. Proses ini menunjukkan cara Pub/Sub memungkinkan komunikasi asinkron. Untuk mem-build sistem ini, Anda harus menyelesaikan langkah-langkah berikut:
- Buat akun layanan IAM yang digunakan aplikasi untuk autentikasi.
- Menyiapkan izin IAM.
- Buat topik dan langganan Pub/Sub.
- Mulai tiga aplikasi independen: satu penayang dan dua pelanggan.
Sebelum memulai
- 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.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Pub/Sub API:
gcloud services enable pubsub.googleapis.com
-
Create local authentication credentials for your user account:
gcloud auth application-default login
-
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.
- Replace
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Pub/Sub API:
gcloud services enable pubsub.googleapis.com
-
Create local authentication credentials for your user account:
gcloud auth application-default login
-
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.
- Replace
Instal Python
Tutorial ini menggunakan Library Klien Pub/Sub, yang memerlukan Python 3.7 atau yang lebih baru. Selesaikan petunjuk untuk menginstal Python.
Menyiapkan project Pub/Sub
Untuk mengelola alur pesan antara aplikasi publikasi dan langganan, 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
Membuat sistem one-to-many
Mendownload kode penayang dan pelanggan
Download file Python Pub/Sub yang diperlukan untuk tutorial ini.
git clone https://github.com/googleapis/python-pubsub.git
Tutup terminal yang terbuka sebelum melanjutkan.
Menyiapkan tiga terminal
Mulai satu terminal untuk setiap aplikasi tutorial (satu penayang dan dua pelanggan). Untuk memudahkan, tutorial ini memanggil terminal ini:
- Terminal publisher
- Terminal sub_one
- Terminal sub_two
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 menjalankan perintah aktifkan, command prompt Anda akan menyertakan nilai
(pyenv-qs) $
berikut.Di terminal publisher, instal library klien Python Pub/Sub menggunakan
pip
:python -m pip install --upgrade google-cloud-pubsub
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)
Di ketiga terminal, ubah ke jalur project yang berisi kode contoh.
cd python-pubsub/samples/snippets/quickstart/
Memulai aplikasi dan mengamati alur pesan
Memulai aplikasi Pelanggan 1
Di terminal sub_one, mulai Pelanggan 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 streaming.
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 Penayang mengirim pesan "Halo, Dunia!" ke Pub/Sub tanpa mengetahui langganan yang ada. Server juga menetapkan ID pesan.
Aplikasi Pelanggan 1 menerima pesan 'Hello World', mencetaknya, dan mengirim konfirmasi ke Pub/Sub.
Aplikasi Publisher akan mencetak konfirmasi. Konfirmasi memberi tahu Pub/Sub bahwa pesan telah berhasil diproses dan tidak perlu dikirim ulang ke pelanggan sub_one ini atau lainnya.
Pub/Sub menghapus pesan dari sub_one.
Memulai aplikasi Pelanggan 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.
Pelanggan 2 menggunakan kembali skrip sub.py
. Perbedaannya adalah Pelanggan
2 tidak dimulai hingga setelah Penayang mengirim pesan ke topik
dan langganan. Jika Penayang memanggil Pelanggan 2 secara langsung, aplikasi publikasi harus menunggu hingga Pelanggan 2 muncul
atau waktu tunggunya habis. Pub/Sub mengelola proses ini dengan
menyimpan pesan secara efektif untuk Pelanggan 2.
Sekarang Anda siap mengembangkan aplikasi dengan Pub/Sub.
Bagaimana hasilnya?
Referensi dan link tambahan tersedia di halaman dukungan Pub/Sub.
Pembersihan
- Hentikan semua aplikasi yang berjalan.
- Hapus direktori kode contoh dari lingkungan lokal Anda.
Menghapus topik.
gcloud pubsub topics delete hello_topic
Hapus langganan.
gcloud pubsub subscriptions delete sub_one
gcloud pubsub subscriptions delete sub_two
Matikan project tutorial di bagian IAM & admin di konsol Google Cloud.
-
Optional: Revoke the authentication credentials that you created, and delete the local credential file.
gcloud auth application-default revoke
-
Optional: Revoke credentials from the gcloud CLI.
gcloud auth revoke
Langkah selanjutnya
Berikut beberapa hal yang dapat Anda coba:
Periksa kode
pub.py
dansub.py
tutorial, lalu jelajahi contoh Pub/Sub lainnya di GitHub. Sebagai latihan, buat versipub.py
yang memublikasikan waktu lokal setiap detik.Pelajari cara mengirim pesan secara massal.
Dengan langganan Push, terima pesan yang memicu endpoint App Engine atau Cloud Functions.
Ambil pesan yang sebelumnya diakui menggunakan replay. Secara default, Pub/Sub menghapus pesan yang dikonfirmasi dari langganan. Misalnya, dalam tutorial ini, Anda tidak akan dapat menjalankan ulang
sub.py
untuk menerima pesan "Halo, Dunia!" lagi. Fitur replay memungkinkan Anda menyiapkan langganan sehingga Anda dapat menerima pesan setelah pesan tersebut dikonfirmasi.Mulai gunakan library klien dalam bahasa lain.