我正在使用boto SDK将消息发送到Amazon-SQS。无论我发送什么消息,它都必须使用java编写的SqsListener进行监听。当我发送消息时,我无法获得从python编写的生成器类发送的确切消息。在SQSListener类中,我只是尝试打印我得到的消息。我正在获取加密形式的消息而不是实际消息。
实际消息: 示例消息
收到消息 U2FtcGxlIG1lc3NhZ2U =
在python中编写的 producer 类是:
from boto import sqs
import json
from boto.sqs.message import Message
conn = sqs.connect_to_region('XXXXX', aws_access_key_id='XXXXXXXXXXXX', aws_secret_access_key='XXXXXXXXXXXXXXXXXXXXXXX')
queueInstance = conn.get_queue('sample')
try:
message = Message()
message.set_body("testing sample")
queueInstance.write(message)
except Exception, error:
print error
Receiver SQSListener类是:
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
public class SQSMessageLisner implements MessageListener {
public void onMessage(Message message) {
try {
System.out.println("Inside ON MESSAGE");
//System.out.println(message.get);
String stringMessage = ((TextMessage) message).getText();
System.out.println(stringMessage);
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
发送消息的接收写在相同的SDK中工作正常。从python发送并在java中监听会导致这个问题。请帮我解决这个问题。提前谢谢。
答案 0 :(得分:3)
您的接收器中会收到base64编码的消息。您需要对其进行解码,如Decode Base64 data in Java
所述你的另一个选择是在python中使用boto.sqs.message.RawMessage而不是TextMessage,它不会被编码。