# Amazon Simple Queue Service

Amazon Simple Queue Service (Amazon SQS) es un servicio de colas de mensajes distribuidos creado por Amazon.com y disponible a mediados de 2006. Admite el envío programático de mensajes a través de aplicaciones de servicios web como una forma de comunicarse a través de Internet. SQS está diseñado para proporcionar una cola de mensajes alojada altamente escalable que resuelve los problemas que surgen del problema común de productor-consumidor o la conectividad entre productor y consumidor.
Amazon SQS puede describirse como una mercantilización del servicio de mensajería. Ejemplos bien conocidos de tecnologías de servicios de mensajería incluyen IBM WebSphere MQ y Microsoft Message Queuing. A diferencia de estas tecnologías, los usuarios no necesitan mantener su propio servidor porque Amazon lo hace por ellos y vende el servicio SQS con una tarifa por uso.

## API

Amazon proporciona SDK en varios lenguajes de programación, incluidos Java, Ruby, Python, .NET, PHP, Go y JavaScript. En diciembre de 2014 se lanzó un cliente Java Message Service (JMS) 1.1 para Amazon SQS.

## Autenticación

Amazon SQS proporciona procedimientos de autenticación para permitir el manejo seguro de los datos. Amazon utiliza su identificación de Amazon Web Services (AWS) para hacer esto, lo que requiere que los usuarios tengan una cuenta habilitada para AWS con Amazon.com. AWS asigna un par de identificadores relacionados, sus claves de acceso de AWS, a una cuenta habilitada para AWS para realizar la identificación. El primer identificador es una clave de acceso pública de 20 caracteres. Esta clave se incluye en una solicitud de servicio de AWS para identificar al usuario. Si el usuario no utiliza SOAP (protocolo) con WS-Security, se calcula una firma digital utilizando la clave de acceso secreta. La clave de acceso secreta es un identificador privado de 40 caracteres. AWS utiliza el ID de clave de acceso proporcionado en una solicitud de servicio para buscar la clave de acceso secreta de una cuenta. Amazon.com luego calcula una firma digital con la clave. Si coinciden, el usuario se considera auténtico; si no, la autenticación falla y la solicitud no se procesa.

## Entrega de mensajes

Amazon SQS garantiza la entrega al menos una vez . Los mensajes se almacenan en varios servidores por motivos de redundancia y para garantizar la disponibilidad. Si se entrega un mensaje mientras un servidor no está disponible, es posible que no se elimine de la cola de ese servidor y que se vuelva a enviar. A 2007, Amazon SQS no garantiza que el destinatario recibirá los mensajes en el orden en que fueron enviados por el remitente. Si el orden de los mensajes es importante, se requiere que la aplicación coloque información de secuencia dentro de los mensajes para permitir el reordenamiento después de la entrega.
Los mensajes pueden ser de cualquier tipo y los datos contenidos en ellos no están restringidos. Los cuerpos de los mensajes se limitaron inicialmente a un tamaño de 8 KB, pero luego se elevaron a 64 KB el 1 de julio de 2010 y luego a 256 KB el 18 de junio de 2013. Para mensajes más grandes, el usuario tiene algunas opciones para sortear esta limitación. Un mensaje grande se puede dividir en varios segmentos que se envían por separado, o los datos del mensaje se pueden almacenar mediante Amazon Simple Storage Service (Amazon S3) o Amazon DynamoDB con solo un puntero a los datos transmitidos en el mensaje SQS. Amazon ha puesto a disposición una biblioteca de cliente extendida para este propósito.
El servicio admite colas ilimitadas y tráfico de mensajes.

## Eliminación de mensajes

SQS no elimina automáticamente los mensajes una vez que se envían. Cuando se entrega un mensaje, se genera un identificador de recibo para esa entrega y se envía al destinatario. Estos recibos no se envían con el mensaje sino además de él. SQS requiere que el destinatario proporcione el recibo para eliminar un mensaje. Esta función es nueva a partir de 2008, donde solo se requería el ID del mensaje para eliminar el mensaje. Debido a que el sistema es distribuido, un mensaje puede enviarse más de una vez. En este caso, se necesita el identificador de recepción más reciente para eliminar el mensaje. Además, el identificador de recibo puede tener otras restricciones de validez; por ejemplo, el identificador de recibo solo puede ser válido durante el tiempo de espera de visibilidad (ver más abajo).
Una vez que se entrega un mensaje, tiene un tiempo de espera de visibilidad para evitar que otros componentes lo consuman. El "reloj" para el tiempo de espera de visibilidad comienza una vez que se envía un mensaje, el tiempo predeterminado es de 30 segundos. Si no se le indica a la cola que elimine el mensaje durante este tiempo, el mensaje vuelve a ser visible y estará presente.
Cada cola también consta de un parámetro de retención predeterminado de 4 días. Cualquier mensaje que resida en la cola durante más tiempo se eliminará automáticamente. La retención puede ser modificada desde 1 minuto hasta 14 días por el usuario. Si se cambia la retención mientras los mensajes ya están en la cola, se eliminará cualquier mensaje que haya estado en la cola durante más tiempo que la nueva retención.

## Caso de uso notable

Dropbox, Netflix y Nextdoor son ejemplos de empresas que utilizan SQS de forma generalizada. SQS también se usa ampliamente en Amazon.com.