2017-06-09 123 views
1

我在這裏有一個小問題。我想使用python從文本文件讀取並創建隊列,然後將這些行從文本文件發送到Amazon Web服務SQS(簡單隊列服務)。首先,我實際上設法使用boto來做到這一點,但問題是這些線不是按順序排列的,只是隨機的,就像4號線,1號線,5號線等等。 這裏是我的代碼:從文本文件讀取併發送到aws sqs fifo隊列

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) 

那麼,該怎麼辦?那麼,我們需要創建一個FIFO隊列(我也設法在Python中使用boto3),但現在問題是我讀取文本文件時遇到問題。下面是我用來在SQS中創建FIFO隊列的代碼:

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) 

有人知道如何解決這個問題嗎?謝謝。

+0

什麼你得到的錯誤? –

+0

我收到錯誤消息:AttributeError:'str'對象沒有屬性'write' – raxor

回答

0

嘗試 response.write(m) 在第一段代碼替換 queue_name.write(m) 。您應該使用get_queue_by_name 返回的實際隊列另外,如果只在boto3指定消息體和MessageGroupID,確保基於內容的重複數據刪除隊列啓用,或指定一個MessageDeduplicationId字符串,否則將無法

+0

我試過了,但現在我收到錯誤消息: AttributeError:'sqs.Queue'對象沒有屬性'write' – raxor