JMS学习五(ActiveMQ的本地事务)
生活随笔
收集整理的這篇文章主要介紹了
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的本地事务)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 日常生活小技巧 -- 重装win10系统
- 下一篇: 日常生活 -- STM32开发前言