boto.sqs:读写SQS消息
boto.sqs: read and write SQS messages
我想从一个队列读取消息并将它们写入另一个队列。但是,消息 class 是自定义格式,我不确定如何编写消息 class 并将其导入。
即结构如下:
import boto.sqs
#read messages from one que
conn = boto.sqs.connect_to_region("regionName")
q=conn.get_queue('queueName')
res=q.get_messages()
m = res[0].get_body() #This is the message I read
#Now, I want to write the message into another que
r = conn.get_queue('DifferentqueueName')
r.write(m)
在这里,代码中断,我收到以下错误消息:
224 new_msg = self.connection.send_message(self,
--> 225 message.get_body_encoded(), delay_seconds=delay_seconds,
226 message_attributes=message.message_attributes)
227 message.id = new_msg.id
AttributeError: 'unicode' object has no attribute 'get_body_encoded'
如何定义自定义消息 class 并使用它写入另一个队列?或者,如果我可以在阅读消息时继承 class 并将其用于写作,那就更容易了。我可以做这些吗?
谢谢。
您收到错误的原因是您试图将原始字符串而不是 Message
对象写入队列。试试这个,而不是:
import boto.sqs
#read messages from one que
conn = boto.sqs.connect_to_region("regionName")
q1 = conn.get_queue('queueName')
q2 = conn.get_queue('DifferentqueueName')
messages = q1.get_messages()
for message in messages:
msg_body = message.get_body() #This is the message I read
# Now, I want to write the message into another queue
new_msg = q2.new_message(msg_body)
q2.write(new_msg)
garnaat 的代码对我来说有问题(我正在使用 Java SDK 读取队列,也许这就是原因)所以我对其进行了轻微的修改:
import boto.sqs
from boto.sqs.message import RawMessage
conn = boto.sqs.connect_to_region("avilability_zone")
q1 = conn.get_queue('original_queue')
q2 = conn.get_queue('new_queue')
for i in range(1,400):
messages = q1.get_messages(10)
for message in messages:
msg_body = message.get_body()
new_msg = RawMessage()
new_msg.set_body(msg_body)
q2.write(new_msg)
q1.delete_message(message)
print("{}/400".format(i))
我想从一个队列读取消息并将它们写入另一个队列。但是,消息 class 是自定义格式,我不确定如何编写消息 class 并将其导入。
即结构如下:
import boto.sqs
#read messages from one que
conn = boto.sqs.connect_to_region("regionName")
q=conn.get_queue('queueName')
res=q.get_messages()
m = res[0].get_body() #This is the message I read
#Now, I want to write the message into another que
r = conn.get_queue('DifferentqueueName')
r.write(m)
在这里,代码中断,我收到以下错误消息:
224 new_msg = self.connection.send_message(self,
--> 225 message.get_body_encoded(), delay_seconds=delay_seconds,
226 message_attributes=message.message_attributes)
227 message.id = new_msg.id
AttributeError: 'unicode' object has no attribute 'get_body_encoded'
如何定义自定义消息 class 并使用它写入另一个队列?或者,如果我可以在阅读消息时继承 class 并将其用于写作,那就更容易了。我可以做这些吗?
谢谢。
您收到错误的原因是您试图将原始字符串而不是 Message
对象写入队列。试试这个,而不是:
import boto.sqs
#read messages from one que
conn = boto.sqs.connect_to_region("regionName")
q1 = conn.get_queue('queueName')
q2 = conn.get_queue('DifferentqueueName')
messages = q1.get_messages()
for message in messages:
msg_body = message.get_body() #This is the message I read
# Now, I want to write the message into another queue
new_msg = q2.new_message(msg_body)
q2.write(new_msg)
garnaat 的代码对我来说有问题(我正在使用 Java SDK 读取队列,也许这就是原因)所以我对其进行了轻微的修改:
import boto.sqs
from boto.sqs.message import RawMessage
conn = boto.sqs.connect_to_region("avilability_zone")
q1 = conn.get_queue('original_queue')
q2 = conn.get_queue('new_queue')
for i in range(1,400):
messages = q1.get_messages(10)
for message in messages:
msg_body = message.get_body()
new_msg = RawMessage()
new_msg.set_body(msg_body)
q2.write(new_msg)
q1.delete_message(message)
print("{}/400".format(i))