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"));
}