Spring AMQP convertSendAndReceive VS sendAndReceive

时间:2017-08-30 09:28:08

标签: jwt spring-amqp

我有一个项目,我通过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.....

为什么?我可以改变它以同样的方式工作吗?哪个是正确的? 谢谢

1 个答案:

答案 0 :(得分:1)

sendAndReceive问题是它直接处理邮件并绕过MessageConverter。根据您的报价经验,看起来有一个JSON转换器。 您可以使用SimpleMessageConverter。但这并不重要:如果您想要发送明确byte[],请为msg.getBytes()执行相同的convertSendAndReceive