Introducción a Amazon SQS

Amazon Simple Queue Service (SQS) es un servicio de colas de mensajes completamente administrado que permite desacoplar y escalar microservicios, sistemas distribuidos y aplicaciones sin servidor. SQS elimina la complejidad y la sobrecarga asociadas con la gestión y operación de middleware orientado a mensajes, y permite a los desarrolladores centrarse en la diferenciación del trabajo.

Conceptos Clave

  • Cola de Mensajes: Una cola de mensajes es un componente que almacena mensajes hasta que un servicio o aplicación los procesa.
  • Mensajes: Datos que se envían a través de la cola. Pueden ser de hasta 256 KB de tamaño.
  • Productores: Aplicaciones o servicios que envían mensajes a la cola.
  • Consumidores: Aplicaciones o servicios que reciben y procesan mensajes de la cola.

Tipos de Colas

Amazon SQS ofrece dos tipos de colas:

  1. Colas Estándar: Ofrecen una entrega de mensajes al menos una vez, pero no garantizan el orden de los mensajes.
  2. Colas FIFO (First-In-First-Out): Garantizan que los mensajes se procesen exactamente una vez y en el orden en que se envían.

Configuración de Amazon SQS

Paso 1: Crear una Cola

  1. Inicia sesión en la Consola de Administración de AWS.
  2. Navega a Amazon SQS.
  3. Haz clic en Create Queue.
  4. Selecciona el tipo de cola (Standard o FIFO).
  5. Configura los detalles de la cola:
    • Name: Nombre de la cola.
    • Visibility Timeout: Tiempo durante el cual un mensaje no será visible para otros consumidores después de ser recibido.
    • Message Retention Period: Tiempo que los mensajes se mantienen en la cola si no son procesados.
    • Maximum Message Size: Tamaño máximo de los mensajes.
  6. Haz clic en Create Queue.

Paso 2: Enviar Mensajes a la Cola

import boto3

# Crear un cliente de SQS
sqs = boto3.client('sqs')

# URL de la cola
queue_url = 'https://sqs.us-east-1.amazonaws.com/123456789012/MyQueue'

# Enviar un mensaje
response = sqs.send_message(
    QueueUrl=queue_url,
    MessageBody='Este es un mensaje de prueba'
)

print('Mensaje enviado con ID:', response['MessageId'])

Paso 3: Recibir Mensajes de la Cola

import boto3

# Crear un cliente de SQS
sqs = boto3.client('sqs')

# URL de la cola
queue_url = 'https://sqs.us-east-1.amazonaws.com/123456789012/MyQueue'

# Recibir mensajes
response = sqs.receive_message(
    QueueUrl=queue_url,
    MaxNumberOfMessages=1,
    WaitTimeSeconds=10
)

# Procesar el mensaje
if 'Messages' in response:
    for message in response['Messages']:
        print('Mensaje recibido:', message['Body'])
        # Eliminar el mensaje después de procesarlo
        sqs.delete_message(
            QueueUrl=queue_url,
            ReceiptHandle=message['ReceiptHandle']
        )
else:
    print('No hay mensajes disponibles')

Ejercicios Prácticos

Ejercicio 1: Crear y Configurar una Cola

  1. Crea una cola estándar llamada TestQueue.
  2. Configura el Visibility Timeout a 30 segundos.
  3. Configura el Message Retention Period a 4 días.

Ejercicio 2: Enviar y Recibir Mensajes

  1. Escribe un script en Python para enviar 5 mensajes a TestQueue.
  2. Escribe un script en Python para recibir y procesar los mensajes de TestQueue.

Soluciones

Solución al Ejercicio 1

  1. Sigue los pasos descritos en la sección "Configuración de Amazon SQS" para crear y configurar TestQueue.

Solución al Ejercicio 2

import boto3

# Crear un cliente de SQS
sqs = boto3.client('sqs')

# URL de la cola
queue_url = 'https://sqs.us-east-1.amazonaws.com/123456789012/TestQueue'

# Enviar 5 mensajes
for i in range(5):
    response = sqs.send_message(
        QueueUrl=queue_url,
        MessageBody=f'Mensaje de prueba {i+1}'
    )
    print('Mensaje enviado con ID:', response['MessageId'])

# Recibir y procesar mensajes
while True:
    response = sqs.receive_message(
        QueueUrl=queue_url,
        MaxNumberOfMessages=1,
        WaitTimeSeconds=10
    )

    if 'Messages' in response:
        for message in response['Messages']:
            print('Mensaje recibido:', message['Body'])
            # Eliminar el mensaje después de procesarlo
            sqs.delete_message(
                QueueUrl=queue_url,
                ReceiptHandle=message['ReceiptHandle']
            )
    else:
        print('No hay más mensajes disponibles')
        break

Errores Comunes y Consejos

  • Timeout de Visibilidad: Asegúrate de configurar un Visibility Timeout adecuado para que los mensajes no sean procesados por múltiples consumidores.
  • Permisos de IAM: Verifica que tu rol de IAM tenga los permisos necesarios para interactuar con SQS.
  • Manejo de Errores: Implementa un manejo de errores adecuado para situaciones en las que no se puedan recibir o eliminar mensajes.

Conclusión

En esta sección, hemos aprendido sobre Amazon SQS, sus conceptos clave, cómo configurar una cola, y cómo enviar y recibir mensajes. Estos conocimientos son fundamentales para construir aplicaciones desacopladas y escalables en AWS. En el próximo tema, exploraremos Amazon SNS, otro servicio de mensajería que complementa a SQS.

© Copyright 2024. Todos los derechos reservados