Java 兔子预取

Java 兔子预取,java,spring,amqp,spring-amqp,Java,Spring,Amqp,Spring Amqp,我将spring amqp与rabbitmq一起使用。我想要一条没有预回迁的消息。 我配置了 SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(); container.setConnectionFactory(rabbitConnectionFactory()); container.setQueueNames( ProjectConfi

我将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;

如何禁用预回迁并仅获取一条消息/

预回迁
只需控制代理每次允许在消费者处未完成的消息数量。当设置为1时,这意味着代理将发送1条消息,等待ack,然后发送下一条消息

它默认为1。将其设置为0将意味着代理将不受限制地向消费者发送消息,而不考虑ACK


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

我尝试使用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));
            }
        }
    };
}

嗯,我怎么知道队列中存在没有无限循环的消息?计时器?也许你应该解释一下你的用例(你想实现什么)。为什么您关心消息是否存在?使用侦听器容器,您的应用程序是消息驱动的。我想创建linux系统服务。如果队列不包含消息,则空闲,否则如果收入10条消息。恶魔得到一条消息,处理它,在得到下一条消息之后。