2

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

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

4

2 回答 2

2

prefetch简单地控制代理一次允许有多少消息在消费者处未完成。当设置为 1 时,这意味着代理将发送 1 条消息,等待确认,然后发送下一条。

它默认为 1。将其设置为 0 意味着代理将向消费者发送无限的消息,而不管 acks。

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

于 2013-05-13T15:45:11.297 回答
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));
            }
        }
    };
}
于 2013-05-14T09:27:52.660 回答