Java SimpleMessageListenerContainer无法正确调用消息处理程序
我正在尝试在Spring引导应用程序中侦听RabbitMq队列。在我的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
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
的侦听器容器是由使用启动属性配置的侦听器容器工厂创建的。您需要显示完整的堆栈跟踪,以便我们了解转换异常是什么。