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