Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Sondeos cortos y largos de Amazon SQS
Amazon SQS ofrece opciones de sondeos cortos y largos para recibir mensajes de una cola. Tenga en cuenta los requisitos de capacidad de respuesta y rentabilidad de su aplicación al elegir entre estas dos opciones de sondeo:
-
Sondeo breve (predeterminado): la
ReceiveMessage
solicitud consulta un subconjunto de servidores (según una distribución aleatoria ponderada) para encontrar los mensajes disponibles y envía una respuesta inmediata, incluso si no se encuentra ningún mensaje. -
Sondeo prolongado:
ReceiveMessage
consulta los mensajes en todos los servidores y envía una respuesta una vez que haya al menos un mensaje disponible, hasta el máximo especificado. Solo se envía una respuesta vacía si finaliza el tiempo de espera del sondeo. Esta opción puede reducir la cantidad de respuestas vacías y, potencialmente, reducir los costos.
En las siguientes secciones se explican los detalles de los sondeos cortos y largos.
Temas
Consumo de mensajes mediante sondeo corto
Cuando consume mensajes de una cola (FIFO o estándar) mediante sondeos cortos, Amazon SQS toma muestras de un subconjunto de sus servidores (en función de una distribución aleatoria ponderada) y devuelve los mensajes únicamente de esos servidores. Por tanto, una solicitud ReceiveMessage
determinada podría no devolver todos los mensajes. Sin embargo, si tiene menos de 1 000 mensajes en la cola, una solicitud posterior devolverá sus mensajes. Si sigue consumiendo mensajes de sus colas, Amazon SQS muestrea todos sus servidores y se reciben todos los mensajes.
En el siguiente diagrama se muestra el comportamiento de sondeo corto de los mensajes devueltos de una cola estándar después de que uno de los componentes del sistema realice una solicitud de recepción. Amazon SQS muestrea varios de sus servidores (en gris) y devuelve los mensajes A, C, D y B de estos servidores. El mensaje E no se devuelve en esta solicitud concreta, pero se devuelve en una solicitud posterior.
Consumo de mensajes mediante sondeo largo
Cuando el tiempo de espera de la acción de la API ReceiveMessage
es superior a 0, se está realizando un sondeo largo. El tiempo máximo de espera de sondeo es de 20 segundos. El sondeo largo ayuda a reducir el costo de uso de Amazon SQS al eliminar el número de respuestas vacías (cuando no hay ningún mensaje disponible para una solicitud ReceiveMessage
) y las falsas respuestas vacías (cuando los mensajes están disponibles en la cola, pero no se incluyen en una respuesta). Para obtener información sobre cómo habilitar el sondeo largo para una cola nueva o existente mediante la consola de Amazon SQS, consulte Configuración de los parámetros de cola mediante la consola Amazon SQS. Para obtener las prácticas recomendadas, consulte Configuración de sondeos prolongados en Amazon SQS.
El sondeo largo ofrece los siguientes beneficios:
-
Reducción de las respuestas vacías al permitir que Amazon SQS espere hasta que haya un mensaje disponible en una cola antes de enviar una respuesta. A menos que la conexión agote el tiempo de espera, la respuesta a la solicitud
ReceiveMessage
contiene al menos uno de los mensajes disponibles, hasta el número máximo de mensajes especificado en la acciónReceiveMessage
. En contados casos, es posible que reciba respuestas vacías incluso cuando una cola aún contenga mensajes, sobre todo si especifica un valor bajo para el parámetroReceiveMessageWaitTimeSeconds
. -
Reduzca las falsas respuestas vacías consultando todos (en lugar de un subconjunto) los servidores de Amazon SQS.
-
Devolución de mensajes en cuanto estén disponibles.
Para obtener información sobre cómo confirmar que una cola está vacía, consulte Confirmación de que una cola de Amazon SQS está vacía.
Diferencias entre el sondeo corto y el sondeo largo
El sondeo corto se produce cuando el parámetro WaitTimeSeconds
de una solicitud ReceiveMessage
está establecido en 0
de una de las dos formas siguientes:
-
La llamada a
ReceiveMessage
estableceWaitTimeSeconds
en0
. -
La llamada a
ReceiveMessage
no estableceWaitTimeSeconds
y el atributo de colaReceiveMessageWaitTimeSeconds
está establecido en0
.