Introducció a Cloud Pub/Sub

Cloud Pub/Sub és un servei de missatgeria asíncron que permet la comunicació entre aplicacions mitjançant la publicació i la subscripció a missatges. És ideal per a sistemes distribuïts i microserveis, ja que facilita la transmissió de dades en temps real i la integració de components desacoblats.

Conceptes Clau

  • Publicador (Publisher): L'entitat que envia missatges a un tema.
  • Tema (Topic): Un canal de comunicació al qual els publicadors envien missatges.
  • Subscriptor (Subscriber): L'entitat que rep missatges d'una subscripció.
  • Subscripció (Subscription): Una configuració que permet als subscriptors rebre missatges d'un tema.

Configuració de Cloud Pub/Sub

Pas 1: Crear un Tema

  1. Aneu a la consola de GCP.
  2. Navegueu a "Pub/Sub" al menú de navegació.
  3. Feu clic a "Crear tema".
  4. Introduïu un nom per al tema i feu clic a "Crear".

Pas 2: Crear una Subscripció

  1. Seleccioneu el tema que acabeu de crear.
  2. Feu clic a "Crear subscripció".
  3. Introduïu un nom per a la subscripció.
  4. Seleccioneu el tipus de subscripció (Push o Pull).
  5. Feu clic a "Crear".

Exemple Pràctic

Publicar un Missatge

from google.cloud import pubsub_v1

# Inicialitzar el client de Publisher
publisher = pubsub_v1.PublisherClient()
topic_path = publisher.topic_path('el-teu-projecte', 'el-teu-tema')

# El missatge que vols enviar
message = "Hola, món!"

# Publicar el missatge
future = publisher.publish(topic_path, message.encode('utf-8'))
print(f'Missatge publicat: {future.result()}')

Subscriure's a un Tema

from google.cloud import pubsub_v1

# Inicialitzar el client de Subscriber
subscriber = pubsub_v1.SubscriberClient()
subscription_path = subscriber.subscription_path('el-teu-projecte', 'la-teva-subscripció')

def callback(message):
    print(f'Rebut missatge: {message.data}')
    message.ack()

# Subscriure's al tema
streaming_pull_future = subscriber.subscribe(subscription_path, callback=callback)
print(f'Esperant missatges a {subscription_path}...')

# Manté el procés en execució per rebre missatges
try:
    streaming_pull_future.result()
except KeyboardInterrupt:
    streaming_pull_future.cancel()

Exercicis Pràctics

Exercici 1: Crear i Publicar en un Tema

  1. Crea un tema anomenat test-topic.
  2. Escriu un script en Python per publicar un missatge "Test Message" en aquest tema.

Exercici 2: Crear una Subscripció i Rebre Missatges

  1. Crea una subscripció anomenada test-subscription per al tema test-topic.
  2. Escriu un script en Python per rebre i imprimir missatges de test-subscription.

Solucions

Solució Exercici 1

from google.cloud import pubsub_v1

publisher = pubsub_v1.PublisherClient()
topic_path = publisher.topic_path('el-teu-projecte', 'test-topic')

message = "Test Message"
future = publisher.publish(topic_path, message.encode('utf-8'))
print(f'Missatge publicat: {future.result()}')

Solució Exercici 2

from google.cloud import pubsub_v1

subscriber = pubsub_v1.SubscriberClient()
subscription_path = subscriber.subscription_path('el-teu-projecte', 'test-subscription')

def callback(message):
    print(f'Rebut missatge: {message.data}')
    message.ack()

streaming_pull_future = subscriber.subscribe(subscription_path, callback=callback)
print(f'Esperant missatges a {subscription_path}...')

try:
    streaming_pull_future.result()
except KeyboardInterrupt:
    streaming_pull_future.cancel()

Errors Comuns i Consells

  • Error de permisos: Assegura't que el compte de servei tingui els permisos necessaris per accedir a Pub/Sub.
  • Missatges no rebuts: Verifica que la subscripció estigui correctament configurada i que el callback estigui processant els missatges adequadament.
  • Codificació de missatges: Recorda codificar els missatges en utf-8 abans de publicar-los.

Conclusió

En aquesta secció, hem après els conceptes bàsics de Cloud Pub/Sub, com crear temes i subscripcions, i com publicar i rebre missatges. Aquest servei és essencial per a la comunicació asíncrona en aplicacions distribuïdes, permetent una integració fluida i en temps real entre diferents components del sistema.

© Copyright 2024. Tots els drets reservats