我使用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;
如何禁用预取并只获取一条消息/
答案 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));
}
}
};
}