兔子预取

时间:2013-05-13 13:11:46

标签: java spring amqp spring-amqp

我使用spring amqp和rabbitmq。我希望得到一条没有预取的消息。 我配置了

      SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
    container.setConnectionFactory(rabbitConnectionFactory());
    container.setQueueNames(
            ProjectConfigs.getInstance().get_RABBIT_TASK_QUEUE()
    );
    container.setMessageListener(taskListener());
    container.setConcurrentConsumers(1);
    container.setPrefetchCount(1);
    container.setTxSize(1);
    return container;

如何禁用预取并只获取一条消息/

2 个答案:

答案 0 :(得分:2)

prefetch只是控制经纪人一次允许消费者处理多少消息。设置为1时,这意味着代理将发送1条消息,等待确认,然后发送下一条消息。

默认为1.将其设置为0意味着代理将向消费者发送无限的消息,无论其是什么。

如果您只想要一条消息然后停止,则不应使用容器,您可以使用RabbitTemplate.receive()方法之一。

答案 1 :(得分:0)

我尝试使用Spring AMQP

@Bean
public MessageListener taskListener() {
    return new MessageListener() {
        public void onMessage(Message message) {
            try {
                LOGGER.info(new String(message.getBody(), "UTF-8"));
                Converter converter = new Converter();
                converter.startConvert(new String(message.getBody(), "UTF-8"));
            } catch (Exception e) {
                LOGGER.error(getStackTrace(e));
            }
        }
    };
}