消费者控制台报错
Caused by: com.fasterxml.jackson.core.JsonParseException: Unrecognized token '张三2': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')
at [Source: (String)"张三2"; line: 1, column: 4]
at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1851) ~[jackson-core-2.11.4.jar:2.11.4]
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:717) ~[jackson-core-2.11.4.jar:2.11.4]
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._reportInvalidToken(ReaderBasedJsonParser.java:2898) ~[jackson-core-2.11.4.jar:2.11.4]
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._handleOddValue(ReaderBasedJsonParser.java:1944) ~[jackson-core-2.11.4.jar:2.11.4]
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:776) ~[jackson-core-2.11.4.jar:2.11.4]
at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4664) ~[jackson-databind-2.11.4.jar:2.11.4]
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4513) ~[jackson-databind-2.11.4.jar:2.11.4]
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3468) ~[jackson-databind-2.11.4.jar:2.11.4]
at org.springframework.amqp.support.converter.AbstractJackson2MessageConverter.convertBytesToObject(AbstractJackson2MessageConverter.java:345) ~[spring-amqp-2.2.15.RELEASE.jar:2.2.15.RELEASE]
at org.springframework.amqp.support.converter.AbstractJackson2MessageConverter.doFromMessage(AbstractJackson2MessageConverter.java:310) ~[spring-amqp-2.2.15.RELEASE.jar:2.2.15.RELEASE]
... 18 common frames omitted
提供者代码(修改前)
@Test
public void testSendObjectExchange2(){
String exchangeName = "root.topic";
MessageProperties messageProperties = new MessageProperties();
messageProperties.setExpiration("10000");
Message message1 = new Message("张三2".getBytes(), messageProperties);
rabbitTemplate.convertAndSend( "object.queue1", message1);
}
- 引入的依赖
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.9.10</version>
</dependency>
</dependencies>
- RabbitMq接收到的参数
- 消费者代码
@RabbitListener(queues = "object.queue1")
public void fanoutQueueObject2(String msg) throws InterruptedException {
System.err.println("消费者接收到object.queue1的消息为msg= [ " + msg + " ] ");
}
错误原因
jackson 类型转换失败,jackson 有严格的转换规范,发送者发送到queue的信息格式不对,String类型数据要加上双引号
修改后的提供者代码
@Test
public void testSendObjectExchange(){
String exchangeName = "root.topic";
MessageProperties messageProperties = new MessageProperties();
messageProperties.setExpiration("10000");
Message message1 = new Message("\"张三2\"".getBytes(), messageProperties);
rabbitTemplate.convertAndSend( "object.queue1", message1);
}