Мне трудно заставить приложение Spring 3 интегрироваться с RabbitMQ, чтобы получать сообщения из очереди (мне не нужно отправлять сообщения).
Большая часть проблемы связана сдокументация теперь относится к Spring Boot. Полезное руководство по пружине полезно, но выполнение следующих шагов в моем случае не работает. Например, руководство включает в себя текст:
Контейнер слушателя сообщений и компоненты-получатели - все, что вам нужно для прослушивания сообщений.
Итак, я настроил контейнер слушателяи приемные компоненты со следующим кодом.
Настройка обработчика сообщений
@Component
public class CustomMessageHandler {
public void handleMessage(String text) {
System.out.println("Received: " + text);
}
}
Настройка конфигурации
@Configuration
public class RabbitConfig {
@Bean
public RabbitTemplate rabbitTemplate(final ConnectionFactory connectionFactory){
final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setRoutingKey("queue-name");
return rabbitTemplate;
}
@Bean
public ConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
connectionFactory.setHost("...host...");
connectionFactory.setPort(5671);
connectionFactory.setVirtualHost("...virtual host..");
connectionFactory.setUsername("...username...");
connectionFactory.setPassword("...password...");
return connectionFactory;
}
@Bean
public MessageListenerAdapter messageListenerAdapter(CustomMessageHandler messageHandler) {
return new MessageListenerAdapter(messageHandler, "handleMessage");
}
@Bean
public SimpleMessageListenerContainer listenerContainer(ConnectionFactory connectionFactory,
MessageListenerAdapter messageListenerAdapter) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setQueueNames("queue-name");
container.setConnectionFactory(connectionFactory);
container.setMessageListener(messageListenerAdapter);
return container;
}
}
К сожалению, с этой настройкой приложение запустится, но оно никогда не вызовет обработчик сообщений. В очереди, из которой она пытается прочитать, также есть одно сообщение, которое находится в ожидании, чтобы быть использованным.
Есть идеи о том, что отсутствует или кажется неправильно настроенным?