日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JMS学习五(ActiveMQ的本地事务)

發布時間:2025/3/15 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JMS学习五(ActiveMQ的本地事务) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、ActiveMQ的本地事務

?

? ? ? ??在一個JMS客戶端,可以使用本地事務來組合消息的發送和接收。JMS Session接口提供了commit和rollback方法。事務提交意味著生產的所有消息被發送,消費的所有消息被確認;事務回滾意味著生產的所有消息被銷毀,消費的所有消息被恢復并重新提交,除非它們已經過期。 事務性的會話總是牽涉到事務處理中,commit或rollback方法一旦被調用,一個事務就結束了,而另一個事務被開始。關閉事務性會話將回滾其中的事務。 需要注意的是,如果使用請求/回復機制,即發送一個消息,同時希望在同一個事務中等待接收該消息的回復,那么程序將被掛起,因為直到事務提交,發送操作才會真正執行。 需要注意的還有一個,消息的生產和消費不能包含在同一個事務中。

? ? ? ?在事務狀態下進行發送操作,消息并未真正投遞到中間件,而只有進行session.commit操作之后,消息才會發送到中間件,再轉發到適當的消費者進行處理。如果是調用rollback操作,則表明,當前事務期間內所發送的消息都取消掉。

?

2、關于ActiveMQ本地事務的用法

public class Sender { public static void main(String[] args) throws Exception { // 1、建立ConnectionFactory工廠對象,需要填入用戶名,密碼,以及連接的地址 // 僅使用默認。端口號為"tcp://localhost:61616" ConnectionFactory connectionFactory = new ActiveMQConnectionFactory( "zhangsan",// ActiveMQConnectionFactory.DEFAULT_USER, "123",// ActiveMQConnectionFactory.DEFAULT_PASSWORD, "tcp://localhost:61616"); // 2、通過ConnectionFactory工廠對象創建一個Connection連接 // 并且調用Connection的start方法開啟連接,Connection默認是不開啟的 Connection connection = connectionFactory.createConnection(); connection.start(); // 3、通過Connection對象創建Session會話(上下文環境對象), // 參數一,表示是否開啟事務 // 參數二,表示的是簽收模式,一般使用的有自動簽收和客戶端自己確認簽收 // 第一個參數設置為true,表示開啟事務 // 開啟事務后,記得要手動提交事務 Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE); // 4、通過Session創建Destination對象,指的是一個客戶端用來指定生產消息目標和消費消息來源的對象。 // 在PTP模式中,Destination指的是Queue // 在發布訂閱模式中,Destination指的是Topic Destination destination = session.createQueue("queue1"); // 5、使用Session來創建消息對象的生產者或者消費者 MessageProducer messageProducer = session.createProducer(destination); // 6、如果是,生產者,使用MessageProducer的setDeliverMode方法設置,消息的持久化和非持久化 messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); // 7、最后使用JMS規范的TextMessage形式創建數據(通過Session對象) // 并利用MessageProducer的send方法發送數據 for (int i = 0; i < 5; i++) { TextMessage textMessage = session.createTextMessage(); textMessage.setText("我是消息" + i); messageProducer.send(textMessage); } // 手動提交開啟的事務 session.commit(); // 釋放連接 if (connection != null) { connection.close(); } } }

?

2.1 ? 開啟事務

// 3、通過Connection對象創建Session會話(上下文環境對象), // 參數一,表示是否開啟事務 // 參數二,表示的是簽收模式,一般使用的有自動簽收和客戶端自己確認簽收 // 第一個參數設置為true,表示開啟事務 // 開啟事務后,記得要手動提交事務 Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);

?

?2.2 ? ?提交事務

?

// 7、最后使用JMS規范的TextMessage形式創建數據(通過Session對象) // 并利用MessageProducer的send方法發送數據 for (int i = 0; i < 5; i++) { TextMessage textMessage = session.createTextMessage(); textMessage.setText("我是消息" + i); messageProducer.send(textMessage); } // 手動提交開啟的事務 session.commit(); 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的JMS学习五(ActiveMQ的本地事务)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。