Étranglant SQS d'avoir un maximum de 1 message dans vol traverser tous les abonnés?

voix
1

J'ai une situation où je suis déclenchement d'un processus en cours d'exécution sur une longue Microservice par un message SQS. J'ai plusieurs instances du même Microservice mais je veux seulement un cas pour exécuter la tâche. Est-il possible de préciser que la file d'attente ne doit délivrer 1 message et attendre que le répondre d'abonné ou il atteindre le délai d'attente de visibilité?

Merci

Créé 18/12/2018 à 11:09
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
0

Je veux envoyer un message uniquement à SubscriberA et attendre processus SubscriberA le message complètement ou jusqu'à ce que le délai d'attente. Je ne peux pas voir comment éviter le subscriberB pour ramasser un autre message de la file d'attente jusqu'à la fin SubscriberA

Il est étrange que vous avez une architecture comme si. Cela fera usage d'un abonné à la fois pour une flotte de Microservice abonné / multi-instance ne convient pas.

S'il est possible, s'il vous plaît laissez simplement l'un de vos microservices subscribe / poll la file d'attente

Dans le cas contraire, vous devrez vous-même. Ma suggestion:

  • Avoir deux files d'attente. Une file d'attente de la recevrait tous les messages. L'un de la file servirait le message à vos abonnés. Votre base de code pas beaucoup changer si elle est mis en place comme celui-ci
  • Mettre en place une fonction Lambda déclenchée par la réception-SQS. Définissez la fonction de cette simultanéité à 1, régler le délai de livraison de vos SQS à accélérateur que vous le souhaitez
  • La fonction devra vérifier la Serving-SQS s'il y a un message dans cette file d'attente (waitting ou en cours de traitement) via l'API GetQueueAttributes
  • Envoyer le message que le Serving-SQS si elle est libre ou renvoyer le message à la réception-SQS
Créé 19/12/2018 à 06:37
source utilisateur

voix
0

SQS fait déjà pour vous. L'attribut « délai d'attente de visibilité » veille à ce que la tâche est visible à 1 travailleur si vous aligner avec le temps d'exécution maximum.

Le travailleur va chercher l'objet de SQS. SQS assure qu'il est seulement livré une fois invisible pour les autres dans le temps du délai d'attente de visibilité. Vous devez donner un temps d'exécution maximum pour la tâche. Disons que 5 minutes. Et mettre un délai d'attente de visibilité. Disons que 6 minutes. Passé ce délai, si le travailleur n'a pas exécuté avec succès la tâche sera l'élément invisible pour les autres pendant une minute, puis revenir à la file d'attente. Après cette autre travailleur peut prendre le message et il est invisible pour les autres pendant 6 minutes encore. En cas de succès le travailleur doit supprimer le message.

De cette façon, vous assurer que chaque élément ne reçoit que les produits transformés.

Créé 18/12/2018 à 11:23
source utilisateur

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