Jwt Spring AMQP转换器发送和接收VS发送和接收
我有一个项目,通过AMQP发送带有签名JSON对象的消息。在服务器端,我有以下内容:Jwt Spring AMQP转换器发送和接收VS发送和接收,jwt,spring-amqp,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); Syst
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....."
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);
但是如果我使用发送和接收方法,我不会得到引号:
String _payload = new String(msg.getBody(), StandardCharsets.UTF_8);
System.out.println(_payload);
"eyJ4NWMiOlsiTUlJRHV6Q0NBcU9nQXdJQkFnSUNDMEV3RFFZSktvWklodmNOQVFFR....."
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);
在服务器端,我得到(使用相同的代码):
为什么呢?我能把它换成同样的工作方式吗?哪一个是正确的?
感谢您解决了
发送和接收
的问题,它直接处理消息并绕过消息转换器
。根据您的报价经验,似乎有一个JSON转换器。
您可以使用
SimpleMessageConverter
。但是这并不重要:如果你想发送clearbyte[]
,只需对ConvertSendReceive
执行相同的msg.getBytes()
,你需要显示其余的配置;看来您的发送端和接收端的消息转换器不匹配。谢谢。是的,我有一个JSON转换器:@Bean public RabbitTemplate RabbitTemplate(){RabbitTemplate=new RabbitTemplate(simpleRoutingConnectionFactory());template.setMessageConverter(jsonMessageConverter());但我需要它(至少目前需要)。如果我使用msg.getBytes()收到的消息与发送的消息不同,因此目前的解决方案是在收到消息后删除服务器上的那些引号。