activemq深入了解 佇列模式手動控制消費

2021-07-31 05:18:01 字數 1765 閱讀 9157

相信經過了解,基本使用activemq後,大家一定知道佇列裡面有ack模式,他的型別有以下幾種

1、auto_acknowledge = 1    自動確認

2、client_acknowledge = 2    客戶端手動確認

3、dups_ok_acknowledge = 3    自動批量確認

4、session_transacted = 0    事務提交並確認

5、individual_acknowledge = 4    單條訊息確認(自定義ack_mode)

使用方式一般有

1、使用連線建立session

session session = connection.createsession(false, session.auto_acknowledge);   

2、spring中配置

注意:當我們只配置了這些,以為在消費者出獲取訊息呼叫message.acknowledge();方法就能控制訊息的消費,很明顯,不行!

查閱資料你會發現,當你獲取訊息的時候,預設的獲取方法裡面沒有走你的這些配置直接就消費了訊息,所以就達不到我們想要的效果,手動控制消費。所以,我們需要重寫乙個方法手動獲取,但是帶上自己的引數。

[html]view plain

copy

/**  

* 接收訊息   

* @param session   

* @param consumer   

* @param autoacknowledge 是否開啟手動消費  

* @return   

* @throws jm***ception   

*/  

protected message doreceive(session session, messageconsumer consumer,boolean autoacknowledge) throws jm***ception     

}    

//autoacknowledge如果為真,不進行自動確認    

else if (isclientacknowledge(session) && !autoacknowledge)     

}    

return message;    

}    

finally     

}  

[html]view plain

copy

/**   

* 由於上面的doreceive(session session, messageconsumer consumer,boolean autoacknowledge)需要呼叫這個方法,   

* 而在父類裡面這個方法是私有的,所以直接拷貝下來了   

* @param consumer   

* @param timeout   

* @return   

* @throws jm***ception   

*/  

private message doreceive(messageconsumer consumer, long timeout) throws jm***ception     

else if (timeout > 0)     

else     

}    

在獲取內容之前先判斷sessionacknowledgemode的值,根據是否需要手動控制傳入autoacknowledge,達到手動控制的效果。

深入了解A

一 前言 在這裡我將對a 演算法的實際應用進行一定的 並且舉乙個有關a 演算法在最短路徑搜尋的例子。值得注意的是這裡並不對a 的基本的概念作介紹,如果你還對a 演算法不清楚的話,請看姊妹篇 初識a 演算法 這裡所舉的例子是參考amit主頁中的乙個源程式,使用這個源程式時,應該遵守一定的公約。二 a ...

深入了解A

一 前言 在這裡我將對a 演算法的實際應用進行一定的 並且舉乙個有關a 演算法在最短路徑搜尋的例子。值得注意的是這裡並不對a 的基本的概念作介紹,如果你還對a 演算法不清楚的話,請看姊妹篇 初識a 演算法 這裡所舉的例子是參考amit主頁中的乙個源程式,使用這個源程式時,應該遵守一定的公約。二 a ...

深入了解Dojo Data

譯自http www.sitepen.com blog 2010 10 13 dive into dojo data 使用dojo data有助於快速建立web應用的介面,且易於嵌入各種資料來源。它在使用者介面與底層資料之間提供了一層抽象層,使得使用者介面開發人員能夠專注於ui的開發,而無需擔心資料...