2017-08-30 7 views
0

AMQPを介して署名されたJSONオブジェクトでメッセージを送信するプロジェクトがあります。私はAMQPメッセージの内容を取得するとSpring AMQP convertSendAndReceive VS sendAndReceive

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; 
        } 
       } 
     ); 

私は、文字列を取得します:私は方法このようなconvertSendAndReceiveを使用する場合、今

public class MyServerHandler implements MessageListener{ 
... 
    @Override 
    public void onMessage(Message msg) 
    { 
     String _payload = new String(msg.getBody(), StandardCharsets.UTF_8); 
     System.out.println(_payload); 
     ... 

:サーバー側では、私は以下の持っています送信されたが、二重引用符で:

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); 

:dが、私は引用符を取得しないのはなぜそれが

eyJ4NWMiOlsiTUlJRHV6Q0NBcU9nQXdJQkFnSUNDMEV3RFFZSktvWklodmNOQVFFR..... 

のですか?同じように動作するように変更することはできますか?そして、どちらが正しいでしょうか? ありがとう

+0

残りの設定を表示する必要があります。送信側と受信側で不一致のメッセージコンバータがあるようです。 –

答えて

0

sendAndReceiveでメッセージを直接処理してバイパスする問題MessageConverter。引用の経験によると、JSONコンバータがあるようです。 SimpleMessageConverterを使用できます。しかし、それは本当に問題ではありません。byte[]を送信したい場合は、convertSendAndReceiveの場合と同じようにmsg.getBytes()を送信してください。

+0

ありがとうございましたArtem。はい、私はJSONコンバータを有する:@Bean \t公共RabbitTemplate rabbitTemplate() \t {\t \t RabbitTemplateテンプレート=新しいRabbitTemplate(simpleRoutingConnectionFactory())。 \t \t template.setMessageConverter(jsonMessageConverter());しかし、私はそれが必要です(少なくとも現時点では)。 msg.getBytes()を使用した場合、受信したメッセージは送信されたメッセージと同じではないので、メッセージが受信された時点で、サーバー上のこれらの引用符を削除するようにしてください。 – jandres

関連する問題