RabbitMQ事务机制

生产者确认机制:

      默认情况下发送消息的操作是不会返回任何信息给生产者的,也就是默认情况下生产者是不知道消息有没有正确的到达服务器, 如果在消息到达服务器之前就已经丢失了,持久化操作也解决不了问题。

RabbitMQ针对这个问题,提供了两种解决方式:

 

  1.  通过事务机制实现

  2.  通过发送方确认(publisher confirm)机制实现

事务机制:

   RabbitMQ客户端与事务机制相关的方法有三个:

  •  channel.txSelect(): 将当前的信道设置为事务模式
  •  channel.txCommit(): 用于提交事务
  •  channel.txRollback(): 用于事务回滚

如果在事务提交之前发生异常,我们可以将其捕获,通过执行channel.txRollback()实现事务回滚 

package com.song.songvue.config.message;


import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * 生产者客户端代码
 */
public class RabbitProducer {

    private static final String IP_ADDRESS = "172.16.200.239";
    private static final int PORT = 5672;

    public static void main(String[] args) throws IOException, TimeoutException {

        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost(IP_ADDRESS);
        factory.setPort(PORT);
        factory.setUsername("root");
        factory.setPassword("123456");

        // 创建连接
        Connection connection = factory.newConnection();
        // 创建信道
        Channel channel = connection.createChannel();

        try {
            channel.txSelect();
            channel.basicPublish("song_multi", "black", MessageProperties.PERSISTENT_TEXT_PLAIN,
                    "transaction message".getBytes());
            int result = 1 / 0;
            channel.txCommit();
        } catch (Exception e) {
            channel.txRollback();
        }

        // 关闭资源
        channel.close();
        connection.close();
    }
}

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值