J'utilise le client boto3 en python. Je suis en train de pousser les messages vers les carrés mais je les reçois dans le mauvais ordre. Je peux voir que leur heure d'envoi est correcte.Messages SQS reçus en désordre
La file d'attente est créée comme ça:
boto_session = boto3.Session(region_name=..,aws_access_key_id=.., aws_secret_access_key=...)
sqs_client = boto_session.resource('sqs', endpoint_url=endpoint_url)
sqs_client.create_queue(QueueName=...)
Le code pour pousser les messages:
boto_session = boto3.Session(region_name=..,aws_access_key_id=..,aws_secret_access_key=...)
sqs_client = boto_session.resource('sqs', endpoint_url=endpoint_url)
queue = sqs_client.get_queue_by_name(QueueName=stream_name)
i = 0
while i < 10:
print 'b ' + str(i)
queue.send_message(MessageBody=raw_data.push(json.dumps(dict(id=i)))
sleep(2)
i += 1
et le code pour les messages de vote:
sqs_resource = boto_session.resource('sqs', endpoint_url=endpoint_url)
queue = sqs_resource.get_queue_by_name(QueueName=queue_name)
while True:
messages = queue.receive_messages(MaxNumberOfMessages=1,VisibilityTimeout=10,WaitTimeSeconds=5)
for m in messages:
print m.data
queue.delete_messages(
Entries=[
{
'Id': m.message_id,
'ReceiptHandle': m.receipt_handle
}
]
)
J'ai couru la création d'un code de file d'attente , puis j'ai poussé les messages, puis a couru un processus pour consommer les messages comme indiqué.
Je vois clairement que les messages sont triés au hasard.
Existe-t-il une solution pour cela en m²? ou devrais-je remplacer la file d'attente?
Le comportement est techniquement valide, mais définir MaxNumberOfMessages à 1 et WaitTimeSeconds <20 est probablement exagérer ce que vous voyez ...car en faisant cela lorsque la file d'attente est préchargée de messages, vous installez par inadvertance un "J'ai besoin de travail, alors donnez-moi quelque chose, n'importe quoi, rapidement" le premier message est susceptible d'être sélectionné plus aléatoirement que ce serait dans les opérations normales. Réglez-le à 10 et voir ce qui se passe. Essayez également de démarrer votre client séparément, et laissez-le fonctionner pendant que vous exécutez le producteur et notez vos observations, avec max 1 et max 10. –
J'ai déjà essayé dix et j'ai essayé de changer le temps max, rien n'y fait. – user2283268