RabbitMq的事务机制

RabbitMQ中与事务机制有关的方法有三个:txSelect(), txCommit()以及txRollback(), txSelect用于将当前channel设置成transaction模式,txCommit用于提交事务,txRollback用于回滚事务,在通过txSelect开启事务之后,我们便可以发布消息给broker代理服务器了,如果txCommit提交成功了,则消息一定到达了broker了,如果在txCommit执行之前broker异常崩溃或者由于其他原因抛出异常,这个时候我们便可以捕获异常通过txRollback回滚事务了。

复制代码
public class P1 {

    private static final String QUEUE_NAME = "test_tx";
    public static void main(String[] args) throws IOException, TimeoutException {
        Connection connection = ConnectionUtils.getConnection();
        Channel channel = connection.createChannel();

        channel.queueDeclare(QUEUE_NAME,false,false,true,null);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z");
        Date date = new Date(System.currentTimeMillis());
        String message = simpleDateFormat.format(date);

        try {
            channel.txSelect();//开始事务
            channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
            channel.txCommit();//提交事务
        }catch (Exception e){
            channel.txRollback();//回滚事务
            System.out.println("send message txRollback");
        }
        channel.close();
        connection.close();


    }
}
  • 采用事务机制实现会降低RabbitMQ的消息吞吐量。
  • 有一种更好的方法就是开启发布确认,生产者在发送消息时会为每条消息分配一个唯一的id,当消息正常到达broker时就会通知生产者。
  • 一旦发布一条消息,生产者应用程序就可以在等信道返回确认的同时继续发送下一条消息,当消息最终得到确认之后,生产者应用便可以通过回调方法来处理该确认消息,如果 RabbitMQ 因为自身内部错误导致消息丢失,就会发送一条 nack 消息,生产者应用程序同样可以在回调方法中处理该 nack 消息。
相关推荐
嘉禾望岗5034 小时前
spark算子类型
大数据·分布式·spark
大厂技术总监下海4 小时前
来自美团生产环境的实战派:开源CAT监控,如何保障超大规模分布式系统可观测性?
分布式·开源
大厂技术总监下海5 小时前
深入 Apache Dubbo 架构:解读一个开源高性能 RPC 框架的设计哲学与核心源码
分布式·微服务
前端不太难9 小时前
不写 Socket,也能做远程任务?HarmonyOS 分布式任务同步实战
分布式·华为·harmonyos
回家路上绕了弯10 小时前
Spring Retry框架实战指南:优雅处理分布式系统中的瞬时故障
分布式·后端
前端不太难10 小时前
HarmonyOS 分布式开发第一课:设备间协同调试实战
分布式·华为·harmonyos
AutoMQ10 小时前
当 Kafka 架构显露“疲态”:共享存储领域正迎来创新变革
分布式·架构·kafka
程序员阿鹏10 小时前
RabbitMQ持久化到磁盘中有个节点断掉了怎么办?
java·开发语言·分布式·后端·spring·缓存·rabbitmq
独自破碎E11 小时前
Kafka的索引设计有什么亮点?
数据库·分布式·kafka
武子康11 小时前
Java-218 RocketMQ Java API 实战:同步/异步 Producer 与 Pull/Push Consumer
java·大数据·分布式·消息队列·rocketmq·java-rocketmq·mq