# Pub/Sub
En esta actividad aprenderemos a usar Pub/Sub, el sistema de publish subscribe de GCP. La idea es entender los conceptos relacionados a la comunicación de grandes volúmenes de datos de una manera práctica.
**Creación de tópico**
Por interfaz web busca en el menu del navegador Pub/Sub, que se encuentra con los otros servicios de Analytics, luego haz click en Temas (Topics).

Encontrarás el link para crear un tópico en la barra superior (+ CREAR TEMA).

Para crear el tópico debemos poner un *ID del Tema*, el nombre del tópico es único y se forma con este ID. Agregaremos subscripciones manualmente por lo que se puede desmarcar *Agregar una subscripción predeterminada*.

Por línea de comando, para crear un tópico abres la consola de Cloud Shell y usas el siguiente comando. Son muchos menos clicks que por la interfaz gráfica.
```
gcloud pubsub topics create mytopic2
```
**Subscripción a tópico Pull**
Por interfaz, ingresas al tópico creado y en el tab *SUSCRIPCIONES*, seleccionas *Crear suscripción*.
Luego se debe poner un identifiicador a la suscripción, indicando que tipo de entrega se desea: Pull (Extraer) o Push (Enviar). En este caso será Pull (Extraer).

Por línea de comando sería:
```
gcloud pubsub subscriptions create misegundasub --topic=TOPIC_NAME
```
Ojo que TOPIC_NAME es el nombre completo del tópico creado, no solo el identificador.
**Envío de mensaje a tópico**
Por interfaz, dentro del tópico (tema), nos vamos al tab *MENSAJES*:

Acá encontraremos en **Publicar Mensaje** es espacio para poner el contenido del mensaje. Presionar Publicar para enviar.

Por línea de comando:
```
gcloud pubsub topics publish TOPIC_NAME --message "hola mundo 2"
```
Para acceder a estos mensajes desde las subscripciones se debe hacer "pull" (Extraer) del mensaje. Por línea de comando sería:
```
gcloud pubsub subscriptions pull nombre_mi_subcripción --auto-ack
```
Por consola, incresa a las subcripciones dentro del tópico y presiona PULL, si habilitas "Enable ack messages" podrás emitir ACK para que los mensajes se den por entregados a la subscripción y no vuelvan a llegar.

**Trigger Cloud Run Function**
En general vamos a encontrar Pub/Sub integrado con otros servicios de GCP. Un caso muy típico es la integración con Cloud Run Functions, que realiza la función por cada mensaje que reciba el tópico en cuestión.

Para esto primero se debe habilitar **Cloud Functions API**, **Eventarc API** y **Cloud Build API**. Búscalas en la barra de búsqueda y haz click en el botón HABILITAR (Enable). Por ejemplo en Cloud Build:

Ahora, entra al tópico creador en Pub/Sub y presiona sobre **+ Trigger Cloud Run Function**.

Habilita las API obligatorias si es que te faltan algunas y deja por defecto los aspectos básicos y el activador. En el código fuente **elige el entorno de 1ra generación**.

Vamos a dejar la función por defecto, pon un nombre a la función, puedes cambiar el Runtime a Python 3.12 para que el código te sea familiar, es simplemente un print del mensaje.

Luego presiona "DEPLOY FUNCTION".
Puedes enviar mensaje al tópico por Cloud Shell como ya sabes hacerlo y para revisar si esto gatilló la función, busca el servicio *Cloud RUN* en el menu de navegación. Luego ingresa a la función creada.

En el tab **REGISTROS** vas a encontrar si la función se gatilló y cuantos ms se demoró en ejecutar el código.

Puedes repetir este proceso para ver cambios en el tiempo de ejecución.
Para finalizar recuerda borrar los recursos creados.
Para cancelar la subscripción (Borra todas las creadas):
```
gcloud pubsub subscriptions delete miSubscripcion1
```
Para borrar el tópico:
```
gcloud pubsub topics delete mytopic
````
Por interfaz también se puede hacer de manera intuitiva.