2013-12-18 1 views
4

그래서 두 개의 EC2 인스턴스간에 파이썬 객체를 전달하기 위해 SQS를 사용하려고합니다. 여기 내 실패한 시도는 다음과 같습니다Amazon SQS 메시지에 임의의 Python 객체가 있습니까?

import boto.sqs 
from boto.sqs.message import Message 

class UserInput(Message): 
    def set_email(self, email): 
     self.email = email 
    def set_data(self, data): 
     self.data = data 
    def get_email(self): 
     return self.email 
    def get_data(self): 
     return self.data 

conn = boto.sqs.connect_to_region('us-west-2') 
q = conn.create_queue('user_input_queue') 
q.set_message_class(UserInput) 
m = UserInput() 
m.set_email('[email protected]') 
m.set_data({'foo': 'bar'}) 
q.write(m) 

그것은 The request must contain the parameter MessageBody 것을 말하는 오류 메시지를 반환합니다. 실제로 tutorial은 메시지를 대기열에 쓰기 전에 m.set_body('something')을 수행해야한다고 말합니다. 하지만 여기에서는 문자열을 전달하지 않고, UserInput 클래스의 인스턴스를 전달하려고합니다. MessageBody는 무엇이되어야합니까? 나는 docs 읽은 그들은

The constructor for the Message class must accept a keyword parameter “body” which represents the content or body of the message. The format of this parameter will depend on the behavior of the particular Message subclass. For example, if the Message subclass provides dictionary-like behavior to the user the body passed to the constructor should be a dict-like object that can be used to populate the initial state of the message.

는 내 질문에 대한 답은 그 단락에있을 수 있습니다 생각이라고,하지만 난 그것을 이해 할 수 없습니다. 누구든지 그들이 말하는 것에 대해 설명하기 위해 구체적인 코드 예제를 제공 할 수 있습니까?

답변

5

임의의 파이썬 객체의 경우, 객체를 문자열로 직렬화하고, SQS를 사용하여 해당 문자열을 다른 EC2 인스턴스로 보내고 문자열을 다시 같은 클래스의 인스턴스로 직렬화 해제합니다.

예를 들어 JSON을 base64 인코딩으로 사용하여 객체를 문자열로 직렬화하면 메시지 본문이됩니다.

+0

그랬습니다. 감사! – Parzival