rabbitmq消息转换异常

错误日志:
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()来后去的消息转换器,所以导致消费者接受到消息后无法转换而报错。
解决:设置统一的消费转换器。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RabbitMQ具有一些高级特性,使其在消息队列系统中具有更强大的功能和灵活性。以下是一些常见的高级特性: 1. 死信队列(Dead Letter Exchange):RabbitMQ允许将无法被消费或处理的消息路由到特定的死信队列中。这对于处理异常情况或者无法处理的消息非常有用,可以进行后续的处理或者分析。 2. 延迟队列(Delayed Message Exchange):RabbitMQ支持通过插件或者自定义方式实现延迟队列,可以将消息延迟一段时间后再进行投递。这对于需要在特定时间点或者一定延迟后处理消息的场景非常有用。 3. 消息优先级(Message Priority):RabbitMQ允许为消息设置不同的优先级,确保高优先级的消息能够更快地得到处理。这对于处理紧急任务或者优先级较高的消息非常有用。 4. 消息确认机制(Message Acknowledgement):RabbitMQ支持消息确认机制,在消息被消费者成功处理后进行确认,确保消息不会丢失。这对于保证消息的可靠传递非常重要。 5. 消费者限流(Consumer Flow Control):RabbitMQ提供了消费者限流机制,可以控制消费者接收消息的速率,避免消息堆积和过载的情况发生。这对于保证系统的稳定性和性能非常重要。 6. 插件机制(Plugin System):RabbitMQ具有丰富的插件系统,可以通过安装和配置插件来增加新的功能和扩展性。例如,可以通过插件实现消息的压缩、加密、转换等扩展功能。 这些高级特性使得RabbitMQ成为一个强大而灵活的消息队列系统,适用于各种复杂的应用场景和需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值