错误日志:
2021-05-10 09:29:49.116 WARN 6308 --- [org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#1-1] o.s.a.s.c.Jackson2JsonMessageConverter : Could not convert incoming message with content-type [application/x-java-serialized-object], 'json' keyword missing.
2021-05-10 09:29:49.126 WARN 6308 --- [org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#1-1] s.a.r.l.ConditionalRejectingErrorHandler : Execution of Rabbit message listener failed.
org.springframework.amqp.rabbit.support.ListenerExecutionFailedException: Listener method could not be invoked with the incoming message
Endpoint handler details:
Method [public void com.*.*.mq.AgentCancelMqListener.handle(com.*.*.bean.CancelRequest)]
Bean [com.*.*.mq.AgentCancelMqListener@7173ae5b]
at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:214)
at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandlerAndProcessResult(MessagingMessageListenerAdapter.java:143)
at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.onMessage(MessagingMessageListenerAdapter.java:132)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:1569)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.actualInvokeListener(AbstractMessageListenerContainer.java:1488)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:1476)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:1467)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:1411)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:958)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:908)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$1600(SimpleMessageListenerContainer.java:81)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.mainLoop(SimpleMessageListenerContainer.java:1279)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1185)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: org.springframework.messaging.converter.MessageConversionException: Cannot convert from [[B] to [com.*.*.bean.CancelRequest] for GenericMessage [payload=byte[98], headers={amqp_receivedDeliveryMode=PERSISTENT, amqp_receivedRoutingKey=agent-cancel-queue-10-13-10-43, amqp_deliveryTag=1, amqp_consumerQueue=agent-cancel-queue-10-13-10-43, amqp_redelivered=false, id=b5d6b1d5-a941-36d9-874f-077a392dee65, priority=10, amqp_consumerTag=amq.ctag-cOmRPJTLuWGjCa5REOF1ww, amqp_lastInBatch=false, contentType=application/x-java-serialized-object, timestamp=1620610189118}]
at org.springframework.messaging.handler.annotation.support.PayloadMethodArgumentResolver.resolveArgument(PayloadMethodArgumentResolver.java:145)
at org.springframework.messaging.handler.invocation.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:117)
at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:148)
at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:116)
at org.springframework.amqp.rabbit.listener.adapter.HandlerAdapter.invoke(HandlerAdapter.java:50)
at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:211)
... 13 common frames omitted
原因:消费的监听是已Jackson2JsonMessageConverter做为消息转换器,而生产者的消息是jdk的序列化(application/x-java-serialized-object),生产者使用的SimpleMessageConverter()来后去的消息转换器,所以导致消费者接受到消息后无法转换而报错。
解决:设置统一的消费转换器。