ActiveMQ笔记28-消息的生产者事务介绍

还记不记得,在创建session的时候,我们传了两个参数,第一个是事务,第二个是签收,在这篇博客中,我们来说说事务。

connection.createSession();方法的第一个参数就是事务,它的值可以是true或false,代表session的提交是事务提交还是非事务提交。

当事务的值是false时,只要执行了messageProducer.send()方法,消息就到了队列中,也就是自动提交了。

当事务的值是true时,在执行完messageProducer.send()方法后,在session关闭之前需要多加一个session.commit()方法提交事务。

事务的提交,用于实际复杂的业务场景,可能有多个消息需要入队列,假设有一条入队列报错了,我希望这一批次的都要回滚,这就要提到session.rollback();方法了,可以将session.rollback();方法放在catch语句块中来执行。

package com.wsy.activemq.queue;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

public class JmsProducer_Transaction {
    public static final String ACTIVEMQ_URL = "tcp://192.168.0.123:61616";
    public static final String QUEUE_NAME = "queue01";

    public static void main(String[] args) throws JMSException {
        // 创建连接工厂,按照给定的url地址采用默认的用户名和密码
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
        // 通过连接工厂,获取Connection并启动
        Connection connection = activeMQConnectionFactory.createConnection();
        connection.start();
        // 创建Session
        // 有两个参数,第一个是事务,第二个是签收,后面详细介绍
        Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        // 创建目的地(目的地有两个子接口,分别是Queue和Topic)
        Queue queue = session.createQueue(QUEUE_NAME);
        // 创建消息生产者,生产的消息放到queue中
        MessageProducer messageProducer = session.createProducer(queue);
        // 使用messageProducer生产消息发送到队列中
        for (int i = 0; i < 3; i++) {
            // 创建一条消息,可以理解成字符串
            TextMessage textMessage = session.createTextMessage("message-" + i);
            // 通过messageProducer发送消息给mq
            messageProducer.send(textMessage);
        }
        // 上面设置了开启事务,所以需要手动提交
        session.commit();
        // 按照资源打开的相反顺序关闭资源
        messageProducer.close();
        session.close();
        connection.close();
        // 事务需要回滚的场景
        try {
            // 执行一系列send()方法,其中可能会有一条报错
        } catch (Exception e) {
            session.rollback();
        } finally {
            // 关闭资源
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值