Spring AMQP:MessageListener没有收到任何消息

时间:2015-04-09 08:07:11

标签: java rabbitmq spring-amqp message-listener

目前,我正在Spring AMQP项目之上构建自定义库。我已经到了想要实现消息监听器以便能够接收异步消息的地步。在进一步阅读项目指定的文档之后,我管理层发现应该很容易实现自己的消息监听器。只需实现MessageListener类并将其配置为触发传入消息。

这就是我所做的:

public class ReceiveController implements MessageListener
{
    @Override
    public void onMessage(Message message)
    {
        System.out.println("Received a message!");
    }
}

接下来我按照这样配置:

private SimpleMessageListenerContainer configureMessageListener()
{
    SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
    container.setConnectionFactory(connection);
    container.setQueueNames("test.queue");
    container.setMessageListener(this);
    return container;
}

这两段代码都位于名为' ReceiveController'的同一个类中。

  

因此,我没有使用任何上下文(注释或xml)。我不确定这是否是项目运行所必需的,因为我可以自己创建类的实例。

运行一些使用我的库的代码时

  • Consumer客户端连接到RabbitMQ代理(并保持连接)。
  • Producer客户端连接到RabbitMQ代理,发送消息并断开连接。
  • 当我使用管理插件查看队列时,我看到队列中已放入消息,但消息侦听器未被触发。

由于某种原因,消费者不会通过它的听众收到任何消息。这可能与队列是使用' amq.direct'创建的。交换和' test.route'路由键?还是别的什么?

1 个答案:

答案 0 :(得分:3)

手动构建容器时(在Spring Application Context之外),您需要调用afterPropertiesSet()start()

此外,如果您的侦听器实现MessageListenerChannelAwareMessageListener,则您不需要适配器。