1. 程式人生 > >activemq 幾種應答模式

activemq 幾種應答模式

Session.AUTO_ACKNOWLEDGE:自動應答。

Session.CLIENT_ACKNOWLEDGE:手動應答

Session.DUPS_OK_ACKNOWLEDGE:延遲提交

Session.SESSION_TRANSACTED:事務

注意的是:

   Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);

如果第一個引數為true ,那麼後面的值為Session.SESSION_TRANSACTED

在下面的原始碼中可以看出 transacted 為true會被改為 Session.SESSION_TRANSACTED 這個值

return new ActiveMQSession(this, getNextSessionId(), transacted ? Session.SESSION_TRANSACTED : (acknowledgeMode == Session.SESSION_TRANSACTED

            ? Session.AUTO_ACKNOWLEDGE : acknowledgeMode), isDispatchAsync(), isAlwaysSessionAsync());

如果模式為SESSION_TRANSACTED:寫完程式碼必須加session.commit(); 不然事務不會被提交。

messageConsumer.setMessageListener(new MessageListener() {
public void onMessage(Message message) {
if (message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;
try {
System.out.println(textMessage.getText().toString());
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if ("第一次傳送訊息2".equals(textMessage.getText().toString()))
session.commit();


} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


}
});

上面的程式碼中雖然session.commit();只調用了一次但是前面未被提價的資訊也會被提交。

如果模式為CLIENT_ACKNOWLEDGE:

messageConsumer.setMessageListener(new MessageListener() {

public void onMessage(Message message) {
if (message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;
try {
System.out.println(textMessage.getText().toString());

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if ("第一次傳送訊息2".equals(textMessage.getText().toString()))
message.acknowledge();

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


}

});

上面的程式碼中雖然message.acknowledge();只調用了一次但是前面未被提價的資訊也會被提交。

相關推薦

activemq 應答模式

Session.AUTO_ACKNOWLEDGE:自動應答。Session.CLIENT_ACKNOWLEDGE:手動應答Session.DUPS_OK_ACKNOWLEDGE:延遲提交Session.SESSION_TRANSACTED:事務注意的是:   Session

老男孩教育每日一題-第83天-binlog是什麽?記錄的什麽?有工作模式及企業應用場景

mysql binlog 每日一題 參考答案含義binlog:是用於記錄所有更新了數據的操作語句,語句以事件的形式保存,它描述數據的更改過程作用:用於實時備份數據,數據庫的主從復制log_bin 打開記錄binlog功能binlog的查看mysqlbinlog /home/mysql/binlog

Java開發web的開發模式

調度 開發模式 process 模板 spring 程序 校驗 透明 class Java開發web的幾種開發模式 Java Web開發方案有多種可供選擇,這裏列舉一些經典的開發模式進行橫向比較,為Java Web的開發模式選擇提供參考。除此之外還有好多方案(如Tape

java常見的設計模式

設計模式 單例 餓漢式 懶漢式 設計模式 1、概述 1)設計模式(Design pattern):是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結; 2)分類: 創建型模式(創建對象的): 單例模式、抽象工廠模式、建造者模式、工廠模式、原型模式。 行為型模式(對象

iOS 開發中的設計模式

設計模式 開發 模式 ios 設計 iOS 開發中的幾種設計模式

【RabbitMQ】4、Exchange 模式

copy 消息發送 但是 net with .html ole img lis AMQP協議中的核心思想就是生產者和消費者隔離,生產者從不直接將消息發送給隊列。生產者通常不知道是否一個消息會被發送到隊列中,只是將消息發送到一個交換機。先由Exchange來接收,然後Exch

JavaScript創建對象的重要模式

special 高級 .get evel app 傳遞 array 函數傳遞 內部 一、工廠模式 1. 代碼示例 function person(name, age) { var p = new object(); p.name = name; p.age =

高通方案的Android設備開機模式的進入與退出

內容 熱啟動 boot 操作 com 刷機 安裝 tor min 高通方案的Android設備主要有以下幾種開機模式,Android、EDL、Fastboot、Recovery和FFBM,其進入及退出的方式如下表。 開機模式 屏幕表現 冷啟

32位ARM處理器的工作模式和工作狀態

ARM處理器工作模式一共有 7 種 : USR  模式     正常使用者模式,程式正常執行模式 FIQ模式(Fast Interrupt Request)      處理快速中斷,支援高速資料傳送或通道處理 IRQ

RabbitMQ系列之三 RabbitMQ典型模式

本文詳細介紹簡單模式Simple、工作模式Work、釋出訂閱模式Publish/Subscribe、路由模式Routing、萬用字元模式Topics、遠端呼叫模式RPC(暫不對該佇列模式進行詳解) 模式1:簡單模式(Simple / HelloWorld 單生產單消費) 簡單的傳送與

Redis叢集模式

此文由轉載 https://blog.csdn.net/wy0123/article/details/79583506 現在越來越多的專案都會利用到redis,多例項redis服務比單例項要複雜的多,這裡面涉及到定位、容錯、擴容等技術問題。我們常用sharding技術來對此進行管理,其叢

3.RabbitMQ典型模式

本文詳細介紹簡單模式Simple、工作模式Work、釋出訂閱模式Publish/Subscribe、路由模式Routing、萬用字元模式Topics、遠端呼叫模式RPC(暫不對該佇列模式進行詳解) 模式1:簡單模式(Simple / HelloWorld 單生產

Vivado模擬模式比較

Vivado中的5種模擬模式   1、run behavioral simulation 行為級模擬,也是通常說的功能模擬 2、post-synthesis function simulation綜合後的功能模擬 3、post-synthesis timing simula

RabbitMQ的工作模式

maven: <dependencies> <!-- RabbitMQ的客戶端 --> <dependency> <groupId>com.rabb

Unity中常用的設計模式

23種設計模式,實在是太多了,而且其中有一些看著還貌似差不多,讓人很費解,好不容易理解了每一種設計模式的含義,並且看了一堆虛擬碼之後,高高興興的合上了書本去玩幾把LOL,贏了幾把之後腦袋裡關於那23種設計模式的概念就剩下80%了,然後接下來的每日工作中,基本寫程式碼的時候

php執行模式總結

php一共分為五大執行模式:包括cgi 、fast-cgi、cli、isapi、apache 模組的 DLLCGI1、CGI     CGI即通用閘道器介面(Common Gateway Interface),它是一段程式,通俗的講CGI就象是一座橋,把網頁和WEB伺服器中

一個優秀的Unity3d開發者必備的設計模式

變更引起的風險降低,變更是必然的,如果單一職責原則遵守的好,當修改一個功能時,可以顯著降低對其他功能的影響。 需要說明的一點是單一職責原則不只是面向物件程式設計思想所特有的,只要是模組化的程式設計,都適用單一職責原則。 原則2:里氏替換原則 名字的由來 肯定有不少人跟我剛看到這項原則的時候一樣,對這個原則的名

J2EE 中的常用模式?及對設計模式的一些看 法

Session Facade Pattern:使用 SessionBean 訪問 EntityBean; Message Facade Pattern:實現非同步呼叫; EJB Command Pat

Activity 的啟動模式及應用場景

在一個專案中會包括著多個Activity,系統中使用任務棧來儲存建立的Activity例項,任務棧是一種“後進先出”的棧結構。舉個栗子,若我們多次啟動同一個Activity。系統會建立多個例項依次放入任務棧中。當按back鍵返回時,每按一次,一個Activity出棧,直到棧空

常用設計模式的特點

名稱 特點 工廠模式 用一個工廠方法或者類生成物件,來替換掉在在程式碼中直接new 物件的方式 單例模式 構造方法私有化,通過靜態的公有方法來獲取例項物件