Estrangulando SQS para tener un máximo de 1 en vuelo mensaje de cruzar todos los suscriptores?

votos
1

Tengo una situación en la que estoy desencadenar un largo proceso que se ejecuta en un microService por un mensaje de SQS. Tengo varias instancias de la misma microService pero sólo quiero uno instancias para ejecutar la tarea. ¿Hay una manera de especificar que la cola sólo debe entregar 1 mensaje y esperar hasta que el suscriptor o responden que alcanzar el tiempo de espera de visibilidad?

Gracias

Publicado el 18/12/2018 a las 11:09
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
0

Quiero enviar un mensaje sólo para SubscriberA y esperar hasta que el proceso SubscriberA el mensaje completo o hasta que el tiempo de espera. No puedo ver cómo evitar la subscriberB para recoger otro mensaje desde la cola hasta terminar SubscriberA

Es extraño que tiene una arquitectura como tal. Que hará uso de un abonado a la vez para una flota de abonado / multi-instancia microService no es apropiado.

Si es posible, por favor, sólo que uno de vuestros microservicios Inscribirse / sondear la cola

De lo contrario, tendrá que por su cuenta. Mi sugerencia:

  • Tener dos colas. Una de la cola podría recibir todos los mensajes. Una de la cola serviría el mensaje a sus suscriptores. Su base de código no tendrá que cambiar mucho si es puesta a punto como esto
  • Configurar una función de Lambda provocada por SQS-recepción. Establecer la concurrencia de esa función a 1, ajustar el retardo de la entrega de sus SQS de estrangular a su gusto
  • La función tendrá que comprobar la Porción-SQS si hay mensaje en esa cola (Waitting o siendo procesado) a través de la API GetQueueAttributes
  • Enviar el mensaje de la Porción-SQS si es gratis o devolver el mensaje de nuevo a Recibir-SQS
Respondida el 19/12/2018 a las 06:37
fuente por usuario

votos
0

SQS ya hace esto para usted. El atributo "tiempo de espera de visibilidad" asegura que la tarea sólo es visible a 1 trabajador si usted se alinea con el tiempo máximo de ejecución.

El trabajador buscará el objeto de SQS. SQS asegura que sólo se entrega una vez invisible para los demás en el momento del tiempo de espera de visibilidad. Usted debe dar un tiempo máximo de ejecución de la tarea. Digamos 5 minutos. Y poner un mayor tiempo de espera de visibilidad. Digamos 6 minutos. Después de este tiempo, si el trabajador no se ha ejecutado con éxito la tarea que el artículo será invisible para los demás durante otro minuto y luego regresar a la cola. Después de este otro trabajador puede recoger el mensaje y es invisible para los demás durante 6 minutos de nuevo. En caso de éxito el trabajador debe eliminar el mensaje.

De esta manera se asegura que cada elemento sólo se los procesa.

Respondida el 18/12/2018 a las 11:23
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more