Spring 3和Rabbit MQ集成(不是Spring Boot)



我很难让Spring 3应用程序与RabbitMQ集成,以便从队列接收消息(我不需要发送消息(。

挑战的一部分是现在大部分文档都与Spring Boot有关。相关的Spring指南很有帮助,但在我的情况下,遵循这些步骤似乎不起作用。例如,指南中包含以下文本:

消息侦听器容器和接收器bean是侦听消息所需的全部内容。

因此,我使用以下代码设置了侦听器容器和接收器bean。

设置消息处理程序

@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;
}
}

不幸的是,使用这种设置,应用程序将启动,但它从未触发消息处理程序。它试图读取的队列中也有一条消息,等待消费。

有没有关于缺失或似乎配置错误的东西的想法?

多亏了@GaryRussell的一些依赖性管理帮助,我才发现spring-rabbit和spring-amqp的版本太新了。不幸的是,使用旧的1.3.9.RELASE增加了额外的挑战。

其他一些帮助是以使用实际RabbitMQ Java客户端的形式提供的。这个选项实现起来要简单得多,并且避免了依赖性问题。最终,我需要包含以下依赖项:

<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.7.3</version>
</dependency>

然后我简单地遵循了他们关于创建连接和使用消息的文档。

哇,行了!

最新更新