可参考https://blog.csdn.net/hzw19920329/article/details/54340711
在rabbitmq中,可以通过持久化数据,解决服务器异常之后数据丢失问题。
消费者也可以通过手动应答来告知消息队列有没有收到消息。
但是生产者将消息发送出去之后,消息到底有没有到达rabbitmq服务器,默认情况下是不知道的。
两种方式:
AMQP实现了事务机制
confirm
事务机制,针对生产者,消费者无需修改
public class Provider {
private static final String QUEUE_NAME="queue_tx";
public static void main(String[] args) throws Exception{
Connection conn = RabbitMqUtil.getConnection();
Channel channel = conn.createChannel();
try {
//开启事务
channel.txSelect();
channel.basicPublish("", QUEUE_NAME, null, "message".getBytes());
//提交
channel.txCommit();
} catch (Exception e) {
//回滚
System.out.println("异常,数据回滚");
channel.txRollback();
}
finally