2017-06-09 1 views
1

J'ai un petit problème ici. Je veux lire à partir d'un fichier texte en utilisant python et créer une file d'attente, puis envoyer ces lignes à partir du fichier texte dans Amazon Web Services SQS (service Simple Queue). Tout d'abord, j'ai réussi à faire cela en utilisant boto, mais le problème est que les lignes ne viennent pas dans l'ordre, juste au hasard, comme la ligne 4, ligne 1, ligne 5 etc .. Voici mon code:lire à partir du fichier texte et envoyer à aws sqs Fifo file d'attente

import boto.sqs 

conn = boto.sqs.connect_to_region("us-east-2", 
            aws_access_key_id='AKIAIJIQZG5TR3NMW3LQ', 
            aws_secret_access_key='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') 

q = conn.create_queue('test') 
with open('read.txt', 'r') as read_file: 
    from boto.sqs.message import RawMessage 
    for line in read_file: 
     m = RawMessage() 
     m.set_body(line) 
     q.write(m) 

Alors, que faire? Eh bien, nous devons créer une file d'attente FIFO (que j'ai également réussi à utiliser boto3 en python), mais le problème est que j'ai des problèmes de lecture du fichier texte. Voici le code que j'ai utilisé pour créer une file FIFO dans SQS :

import boto3 

AWS_ACCESS_KEY = 'AKIAIJIQZG5TR3NMW3LQ' 
AWS_SECRET_ACCESS_KEY = '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' 
sqs_client = boto3.resource(
    'sqs', 
    aws_access_key_id=AWS_ACCESS_KEY, 
    aws_secret_access_key=AWS_SECRET_ACCESS_KEY, 
    region_name='us-east-2' 
) 

queue_name = ('demo_queue.fifo') 

response = sqs_client.create_queue(
    QueueName=queue_name, 
    Attributes={ 
     'FifoQueue': 'true', 
     'ContentBasedDeduplication': 'true' 
    } 
) 
with open('read.txt', 'r') as read_file: 
    from boto.sqs.message import RawMessage 
    for line in read_file: 
     m = RawMessage() 
     m.set_body(line) 
     queue_name.write(m) 

Quelqu'un sait comment résoudre ce problème? Merci.

+0

Quelle est la erreur que vous obtenez? –

+0

Je reçois le message d'erreur: AttributeError: l'objet 'str' n'a pas d'attribut 'write' – raxor

Répondre

0

Essayez de remplacer queue_name.write(m) avec response.write(m) dans votre premier morceau de code. Vous devez utiliser la file d'attente réelle renvoyée par get_queue_by_name Aussi, quand seulement spécifiant MessageBody et MessageGroupID dans boto3, assurez-vous que la déduplication Content-Based est activée pour la file d'attente, ou spécifier une chaîne de MessageDeduplicationId, sinon il échouera

+0

J'ai essayé, mais maintenant j'obtiens le message d'erreur: AttributeError: l'objet 'sqs.Queue' n'a pas d'attribut 'write' – raxor