1. 事务
AMQP(高级消息队列协议) 实现了事务机制,主要用于确保消息的原子性发布和确认。换言之,它允许你将多个操作 (如发送消息、确认消息) 绑定在一起,要么全部成功,要么全部失败。
发送消息
@RestController
@RequestMapping("/producer")
public class ProducerController {
@Resource(name = "transRabbitTemplate")
private RabbitTemplate transRabbitTemplate;
@Transactional
@RequestMapping("/trans")
public String trans() {
transRabbitTemplate.convertAndSend("", Constants.TRANS_QUEUE, "trans test ---> 1");
int num = 5 / 0;
transRabbitTemplate.convertAndSend("", Constants.TRANS_QUEUE, "trans test ---> 2");
return "发送成功";
}
}
Spring Boot 的 RabbitMQ 自动配置默认会开启确认模式,但 RabbitMQ 不允许同一个通道同时使用事务模式和确认模式,所以需要确保 publisher confirms 被禁用。
spring:
rabbitmq:
publisher-confirm-type: none
publisher-returns: false
配置 RabbitTemplate 和事务管理器
@Configuration
public class RabbitTemplateConfig {
@Bean("transRabbitTemplate")
public RabbitTemplate transRabbitTemplate(ConnectionFactory connectionFactory) {
(connectionFactory);
rabbitTemplate.setChannelTransacted();
rabbitTemplate;
}
RabbitTransactionManager {
(connectionFactory);
}
}


