我有一个项目,我通过AMQP发送带有签名JSON对象的消息。在服务器端,我有以下内容:
public class MyServerHandler implements MessageListener{
...
@Override
public void onMessage(Message msg)
{
String _payload = new String(msg.getBody(), StandardCharsets.UTF_8);
System.out.println(_payload);
...
现在,如果我像这样使用方法 convertSendAndReceive :
String msg = ...deo // JSON object (String)
Object response = getRabbitOperations().convertSendAndReceive(_myExchange, _myRoutingKey, msg,
new MessagePostProcessor()
{
public Message postProcessMessage(Message message) throws AmqpException
{
message.getMessageProperties().setDeliveryMode(MessageDeliveryMode.NON_PERSISTENT);
message.getMessageProperties().setRedelivered(false);
message.getMessageProperties().setUserId(_myUser);
message.getMessageProperties().setType(_myType);
return message;
}
}
);
当我收到AMQP消息的内容时,我得到了发送的字符串但是用引号:
String _payload = new String(msg.getBody(), StandardCharsets.UTF_8);
System.out.println(_payload);
"eyJ4NWMiOlsiTUlJRHV6Q0NBcU9nQXdJQkFnSUNDMEV3RFFZSktvWklodmNOQVFFR....."
但如果我使用 sendAndReceive 方法,我就不会得到引号:
MessageProperties mp = new MessageProperties();
mp.setDeliveryMode(MessageDeliveryMode.NON_PERSISTENT);
mp.setRedelivered(false);
mp.setUserId(_myUser);
mp.setType(_myType);
Message _m = new Message(msg.getBytes(), mp);
Object _response = getRabbitOperations().sendAndReceive(_myExchange, _myRoutingKey, _m);
在服务器端,我得到(使用相同的代码):
eyJ4NWMiOlsiTUlJRHV6Q0NBcU9nQXdJQkFnSUNDMEV3RFFZSktvWklodmNOQVFFR.....
为什么?我可以改变它以同样的方式工作吗?哪个是正确的? 谢谢
答案 0 :(得分:1)
sendAndReceive
问题是它直接处理邮件并绕过MessageConverter
。根据您的报价经验,看起来有一个JSON转换器。
您可以使用SimpleMessageConverter
。但这并不重要:如果您想要发送明确byte[]
,请为msg.getBytes()
执行相同的convertSendAndReceive
。