Я изучаю ограничение длины очереди (https://www.rabbitmq.com/maxlength.html),, как говорится, очередь установлена на 'x-max-length:10'
и 'x-overflow:reject-publish'
, а также, я включаю издателя, подтверждает, поэтому, когда количество сообщений вочередь достигает 10, издатель будет проинформирован об отклонении через сообщение basic.nack, и это: мой обратный вызов подтверждения получил ложное подтверждение, но причина равна нулю, мне интересно, не должно ли он вернуть что-то, чтобы я могРазличают эту ситуацию. Часть кода выглядит следующим образом:
@Bean
public AmqpTemplate amqpTemplate(@Autowired CachingConnectionFactory amqpConnectionFactory) {
amqpConnectionFactory.setPublisherReturns(true);
amqpConnectionFactory.setPublisherConfirms(true);
RabbitTemplate rabbitTemplate = new RabbitTemplate(amqpConnectionFactory);
rabbitTemplate.setMessageConverter(jsonMessageConverter());
rabbitTemplate.setConfirmCallback(confirmCallback);
rabbitTemplate.setReturnCallback(returnCallback);
return rabbitTemplate;
}
static RabbitTemplate.ConfirmCallback confirmCallback = new RabbitTemplate.ConfirmCallback() {
@Override
public void confirm(CorrelationData correlationData, boolean ack, String cause) {
System.out.println(ack); // when number of messages reach 10, print false
System.out.println(cause); // when number of messages reach 10, print null
}
};
@Bean
public Queue queue() {
return QueueBuilder.durable(DURABLE_QUEUE).withArgument("x-max-length", 10).withArgument("x-overflow", "reject-publish").build();
}
@Scheduled(fixedDelay = 1000L)
public void produce() {
Message msg = new Message(UUID.randomUUID().toString(), "sth");
amqpTemplate.convertAndSend("sth", "sth", msg );
}