Java SimpleMessageListenerContainer无法正确调用消息处理程序

Java SimpleMessageListenerContainer无法正确调用消息处理程序,java,spring-boot,rabbitmq,amqp,spring-rabbit,Java,Spring Boot,Rabbitmq,Amqp,Spring Rabbit,我正在尝试在Spring引导应用程序中侦听RabbitMq队列。在我的RabbitConfig.java文件中,我有以下bean: // RabbitConfig.java // ...Queue, exchange, binding beans, etc @Bean SimpleMessageListenerContainer container(ConnectionFactory connectionFactory) { SimpleMessageListenerContainer

我正在尝试在Spring引导应用程序中侦听RabbitMq队列。在我的
RabbitConfig.java
文件中,我有以下bean:

// RabbitConfig.java
// ...Queue, exchange, binding beans, etc

@Bean
SimpleMessageListenerContainer container(ConnectionFactory connectionFactory) {
    SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
    container.setConnectionFactory(connectionFactory);
    container.setConcurrentConsumers(2);
    container.setPrefetchCount(100);
    container.setQueueNames(QUEUE_NAME);
    return container;
}

@Bean
public AmqpTemplate getTemplate(ConnectionFactory connectionFactory) {
    final RabbitTemplate template = new RabbitTemplate(connectionFactory);
    template.setMessageConverter(new Jackson2JsonMessageConverter(mapper));
    return template;
}
我已经创建了一个侦听器容器,因为我需要对其进行一些设置,例如预取计数

我还创建了另一个类作为消息侦听器,如下所示:

@Component
public class MyMessageListener {
    @RabbitListener(queues = QUEUE_NAME)
    public void messageHandler(MyMessageObj message, Channel channel) throws IOException {
        // process message...
}
但是,当我运行应用程序时,它会抛出一个错误
error Handler converted exception to fatal
。出现此错误的原因似乎是容器希望
messageHandler
具有不同的方法签名

我想我可能在容器中做了一些不正确的事情,因为当我删除它时,应用程序可以运行并侦听队列,但我不能在容器中配置设置


我做错了什么?我应该怎么做才能让容器正确地使用
messageHandler

请尝试实现一个MessageListener类,该类实现org.springframework.amqp.core.MessageListener并实现方法“onMessage(Message Message)”

一旦有了定义SimpleMessageListenerContainer的@Configuration类,就需要有一个实现org.springframework.amqp.core.MessageListener并实现方法“onMessage(Message Message)”的对应类

让我知道这是否有帮助

@配置 公共类MessageConfig{

private static String queue = "ARRQueue";
@Bean
ConnectionFactory connectionFactory(){
    CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory("localhost");
    cachingConnectionFactory.setUsername("guest");
    cachingConnectionFactory.setPassword("guest");
    return cachingConnectionFactory;
}

@Bean
MessageListenerContainer messageListenerContainer(){
    SimpleMessageListenerContainer simpleMessageListenerContainer = new SimpleMessageListenerContainer();
    simpleMessageListenerContainer.setConnectionFactory(connectionFactory());
    simpleMessageListenerContainer.setQueues(new Queue(queue, true));
    simpleMessageListenerContainer.setMessageListener(new MessageListener());
    return simpleMessageListenerContainer;
}
}

公共类MessageListener实现org.springframework.amqp.core.MessageListener{ @凌驾 消息(消息消息)上的公共无效 { System.out.println(“MessageListener.onMessage:+新字符串(message.getBody()));
}
@Bean
SimpleMessageListenerContainer容器(ConnectionFactory ConnectionFactory)
此容器是什么?它没有侦听器。
@RabbitListener
的侦听器容器是由使用启动属性配置的侦听器容器工厂创建的。您需要显示完整的堆栈跟踪,以便我们了解转换异常是什么。