在yml配置这样开启:
rabbitmq:
listener:
simple:
####开启手动ack
acknowledge-mode: manual
在@Configuration配置类有一个这样的设置
@Bean
public SimpleMessageListenerContainer simpleMessageListenerContainer(ConnectionFactory connectionFactory){
SimpleMessageListenerContainer simpleMessageListenerContainer = new SimpleMessageListenerContainer(connectionFactory);
simpleMessageListenerContainer.setQueueNames("my.queue.name");
//签收模式
simpleMessageListenerContainer.setAcknowledgeMode(AcknowledgeMode.MANUAL);
return simpleMessageListenerContainer;
}
请问一下 在类配置里面设置自动签收模式,是不是只能自己定义SimpleMessageListenerContainer ?
然后我在消费端使用测试时,发现生产端本来只发送一次消息,消费端重复给我收到了3条消息,第三条时报错,说channel ack/nack关闭,刚好在应答响应的时候哪一行报错,由于在家里面,异常不能截图,所以只能口述
我的消费端
@RabbitListener(queues = {BusinessConst.APP_SEARCH_QUEUE_NAME})
public void receiverMessage (Object entity, Message message, Channel channel) throws IOException {
...
//重复收到三条消息之后,在第三条消息时 以下代码报错,
channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
}