【问题标题】:getting method not found exception while consuming rabbitmq message使用rabbitmq消息时获取方法未找到异常
【发布时间】:2020-09-10 21:20:16
【问题描述】:

已在消费者类上创建以使用来自 rabbitMQ GUI 的消息。

但是当我从 rabbitMQ GUI 发布任何消息时,它的给出的错误类未找到。并且在控制台上不断打印错误。

可能问题是rabbitGUI从字节发送消息,我试图在字符串上接收它。

我想根据消息体调用特定的方法。

@Component
@RabbitListener(queues =  {"#{addNeRangeQueue.name}"})
public class consumerController {

    @RabbitHandler
    public void receive(String message) {
        System.out.println("rabbit mq listener receive : "+message);
    }
}
   
@Configuration
public class RabbitMQConsumerConfig {
 
    //properties value configuration i have removed here.
    @Bean
    public Queue addNeRangeQueue() {
        return new Queue(queueName,false);
    }
    
    @Bean
    public TopicExchange getTopicEchangeName() {
        return new TopicExchange(exchange);
    }

    @Bean
    public Binding bindaddNeRange(TopicExchange getTopicEchangeName, Queue addNeRangeQueue) {
        return BindingBuilder.bind(addNeRangeQueue).to(getTopicEchangeName).with(routingkey);
    }
}

例外:

2020-09-08 00:19:10.378  WARN 9456 --- [ntContainer#0-1] s.a.r.l.ConditionalRejectingErrorHandler : Execution of Rabbit message listener failed.
    
    org.springframework.amqp.rabbit.support.ListenerExecutionFailedException: Listener threw exception
        at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.wrapToListenerExecutionFailedExceptionIfNeeded(AbstractMessageListenerContainer.java:1705) ~[spring-rabbit-2.2.10.RELEASE.jar:2.2.10.RELEASE]
        at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:1595) ~[spring-rabbit-2.2.10.RELEASE.jar:2.2.10.RELEASE]
        at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.actualInvokeListener(AbstractMessageListenerContainer.java:1510) ~[spring-rabbit-2.2.10.RELEASE.jar:2.2.10.RELEASE]
        at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:1498) ~[spring-rabbit-2.2.10.RELEASE.jar:2.2.10.RELEASE]
        at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:1489) ~[spring-rabbit-2.2.10.RELEASE.jar:2.2.10.RELEASE]
        at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:1433) ~[spring-rabbit-2.2.10.RELEASE.jar:2.2.10.RELEASE]
        at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:970) [spring-rabbit-2.2.10.RELEASE.jar:2.2.10.RELEASE]
        at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:916) [spring-rabbit-2.2.10.RELEASE.jar:2.2.10.RELEASE]
        at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$1600(SimpleMessageListenerContainer.java:83) [spring-rabbit-2.2.10.RELEASE.jar:2.2.10.RELEASE]
        at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.mainLoop(SimpleMessageListenerContainer.java:1291) [spring-rabbit-2.2.10.RELEASE.jar:2.2.10.RELEASE]
        at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1197) [spring-rabbit-2.2.10.RELEASE.jar:2.2.10.RELEASE]
        at java.lang.Thread.run(Unknown Source) [na:1.8.0_211]
    Caused by: org.springframework.amqp.AmqpException: No method found for class [B
        at org.springframework.amqp.rabbit.listener.adapter.DelegatingInvocableHandler.getHandlerForPayload(DelegatingInvocableHandler.java:151) ~[spring-rabbit-2.2.10.RELEASE.jar:2.2.10.RELEASE]
        at org.springframework.amqp.rabbit.listener.adapter.DelegatingInvocableHandler.getMethodFor(DelegatingInvocableHandler.java:270) ~[spring-rabbit-2.2.10.RELEASE.jar:2.2.10.RELEASE]
        at org.springframework.amqp.rabbit.listener.adapter.HandlerAdapter.getMethodFor(HandlerAdapter.java:84) ~[spring-rabbit-2.2.10.RELEASE.jar:2.2.10.RELEASE]
        at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandlerAndProcessResult(MessagingMessageListenerAdapter.java:146) ~[spring-rabbit-2.2.10.RELEASE.jar:2.2.10.RELEASE]
        at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.onMessage(MessagingMessageListenerAdapter.java:133) ~[spring-rabbit-2.2.10.RELEASE.jar:2.2.10.RELEASE]
        at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:1591) ~[spring-rabbit-2.2.10.RELEASE.jar:2.2.10.RELEASE]
        ... 10 common frames omitted
   

    

【问题讨论】:

    标签: spring-boot rabbitmq spring-amqp spring-rabbit rabbitmq-exchange


    【解决方案1】:

    从 UI 发布时,您必须添加 content_type 属性,以便消息转换器知道将 byte[] 消息正文转换为什么。

    使用方法级别的@RabbitListener,转换器可以从方法参数推断类型 - 这在类级别注释中是不可能的,因为我们需要先进行转换以确定调用哪个方法。

    对于具有默认SimpleMessageConverter 的简单字符串:

    使用 JSON(和 Jackson2JsonMessageConverter)时:

    【讨论】:

    • 谢谢,是的,我使用 Jackson2JsonMessageConverter 来转换来自 rabbitMQ GUI 的消息,而不是正常工作。
    猜你喜欢
    • 1970-01-01
    • 2011-07-14
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 2015-06-29
    • 2014-05-16
    相关资源
    最近更新 更多