Uso de Amazon SQS en Symfony

pexels-luis-gomes-546819.jpg
Solucionex
22
Abr 22

Instalación

Paquetes básicos para gestionar colas de mensajes

composer require enqueue/enqueue-bundle enqueue/fs

Paquete específico para amzon SQS

composer require enqueue/sqs

Configuración

Ejemplo de configuración para consumir una cola de amazon en el fichero

#config/packages/enqueue.yaml enqueue: default: dsn: 'sqs:?key=%amazon_sqs_key%&secret=%amazon_sqs_secret%®ion=%amazon_sqs_region%' client: router_queue: '%amazon_sqs_queue%' default_queue: '%amazon_sqs_queue%'

Crear mensaje

Para crear un mensaje necesitamos enviar un mensaje a un topic, recordar que el topic es el que se va a usar por el procesador para decidir que el mensaje le corresponde a él procesarlo.

use Enqueue\Client\ProducerInterface; use Enqueue\Client\Message; public funcion createMessage (ProducerInterface $producer) { $body = 'Message body'; $properties = []; $headers = []; $message = new Message($body, $properties, $headers); $producer->sendEvent('exampleTopic', $message); }

Consumir mensaje

Para consumir un mensaje necesitamos una clase que implemente Processor y TopicSubscriberInterface, que dentro de la función getSubscribedTopics tiene que devolver un array de los topics que va a procesar

use Interop\Queue\Message; use Interop\Queue\Context; use Interop\Queue\Processor; use Enqueue\Client\TopicSubscriberInterface; class ExampleProcessor implements Processor, TopicSubscriberInterface { public function process(Message $message, Context $session) { $body = $message->getBody(); $properties = $message->getProperties() return self::ACK; // El mensaje se ha procesado correctamente y sale de la cola return self::REJECT; // El mensaje es erróneo y sale de la cola return self::REQUEUE; // Reencolar el mensaje } public static function getSubscribedTopics() { return ['exampleTopic']; } }

El comando de symfony que consume todos los mensajes que hay en la cola

bin/console enqueue:consume

+Info