Spring RabbitMQ事务和队列溢出

Spring RabbitMQ事务和队列溢出,rabbitmq,spring-rabbit,Rabbitmq,Spring Rabbit,我有一堆文件,每个文件中都有一堆对象。我想将所有这些对象放入队列中,但我想确保接受单个文件中的所有对象,以便删除它。我在发布消息的方法中添加了@Transactional注释: public class Sender { @Autowired private RabbitTemplate template; @Autowired private Queue queue; public Sender(RabbitTemplate template) { this.

我有一堆文件,每个文件中都有一堆对象。我想将所有这些对象放入队列中,但我想确保接受单个文件中的所有对象,以便删除它。我在发布消息的方法中添加了
@Transactional
注释:

public class Sender {

  @Autowired
  private RabbitTemplate template;

  @Autowired
  private Queue queue;

  public Sender(RabbitTemplate template) {
    this.template = template;
    template.setChannelTransacted(true);
  }


  @Transactional
  public void send(List<String> messages) {
    messages.forEach(msg -> template.convertAndSend(queue.getName(), msg));
  }

}
不幸的是,即使超过了最大长度,也会提交事务


消息因最大长度限制而被拒绝时是否可以回滚事务?

根本原因是
溢出
参数,而不是
x-溢出
。默认的溢出策略是删除最旧的消息,因此一切都如预期的那样

@Bean
  public Queue queue() {
    return new Queue("test", true, false, false, Map.of("x-max-length", 3, "overflow", "reject-publish"));
  }