(转)JMS事务

本文介绍如何使用Java消息服务(JMS)进行事务处理,包括创建事务性会话、发送带标志的消息以及如何在一组消息中使用开始和结束标志。通过示例代码展示了如何在JMS中实现消息的事务提交和回滚。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转:http://blog.youkuaiyun.com/jixiuffff/article/details/5780834

事务
         session = conn.createQueueSession(true, Session.AUTO_ACKNOWLEDGE);
         true 表示这个会话是事务性的,需要显式的commit 或者rollback ()
                                         没有begin()方法,眨动打开事务
                                        
     public void send() {
        try {
                    publicMessageFlag("start");
                   publicMessage("msg1");
                    publicMessage("msg2");
                    publicMessage("msg3");
                    publicMessageFlag("end");
                    session.commit();
         } catch (JMSException e) {
                 e.printStackTrace();
            try {
                 session.rollback();
            } catch (JMSException e1) {
                e1.printStackTrace();
            }
        }//发送一个空的bytemessage 消息,标志着这一组消息的开始
    }

package org.jixiuf.chat;
import javax.jms.BytesMessage;
import javax.jms.JMSException;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.jixiuf.util.JNDIUtil;
public class ChatServer {
    QueueConnection conn;
    Queue requestQueue;
    QueueSession session;
    int age = 10;
    QueueSender sender;
    public ChatServer() {
        conn = JNDIUtil.crateQueueConnection();
        requestQueue = JNDIUtil.lookupQueue("requestQueue");
        try {
            session = conn.createQueueSession(true, Session.AUTO_ACKNOWLEDGE);
            sender = session.createSender(requestQueue);
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
    // flag 是"start" ,和"end" 分别表示这组消息的开头
    public void publicMessageFlag(String flag) throws JMSException {
        BytesMessage msg = null;
     
            msg = session.createBytesMessage();
            msg.setStringProperty("JMSXGroupID", "group1");
            msg.setStringProperty("flag", flag);
            sender.send(msg);
    }
    // flag 是"start" ,和"end" 分别表示这组消息的开头
    public void publicMessage(String msgStr)throws JMSException {
        TextMessage msg;
     
            msg = session.createTextMessage();
            msg.setStringProperty("JMSXGroupID", "group1");
            msg.setText(msgStr);
            sender.send(msg);
     
    }
    public void send() {
        try {
            publicMessageFlag("start");
            publicMessage("msg1");
            publicMessage("msg2");
            publicMessage("msg3");
            publicMessageFlag("end");
            session.commit();
        } catch (JMSException e) {
            e.printStackTrace();
            try {
                session.rollback();
            } catch (JMSException e1) {
                e1.printStackTrace();
            }
        }//发送一个空的bytemessage 消息,标志着这一组消息的开始
        
    }
    public void exit() {
        try {
            conn.close();
        } catch (JMSException e) {
            e.printStackTrace();
        }
        System.exit(0);
    }
    public static void main(String[] args) {
        ChatServer server = new ChatServer();
        server.send();
        server.exit();
    }
}

 

转载于:https://www.cnblogs.com/wangle1001986/p/3201939.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值