spring activeMQ 整合(三): 確認機制ACK(收到訊息後,應該有一個迴應也就是確認答覆)
之前寫的spring activemq整合的demo ,今天繼續完善一下這個demo,讓功能更強大。
繼上篇文章之後,我訊息傳送失敗後,可以重新發送了。但是至於別人有沒有收到,這就不得而而而知了。
這時候就要用到ACK確認機制了。
1.ACK機制:
ACK (Acknowledgement),即確認字元,在資料通訊中,接收站發給傳送站的一種傳輸類控制字元。表示發來的資料已確認接收無誤。
JMS API中約定了Client端可以使用四種ACK_MODE,在javax.jms.Session介面中:
- AUTO_ACKNOWLEDGE = 1 自動確認
- CLIENT_ACKNOWLEDGE = 2 客戶端手動確認
- DUPS_OK_ACKNOWLEDGE = 3 自動批量確認
- SESSION_TRANSACTED = 0 事務提交併確認
此外AcitveMQ補充了一個自定義的ACK_MODE: INDIVIDUAL_ACKNOWLEDGE = 4 單條訊息確認
我們在開發JMS應用程式的時候,會經常使用到上述ACK_MODE,其中"INDIVIDUAL_ACKNOWLEDGE "只有ActiveMQ支援,當然開發者也可以使用它. ACK_MODE描述了Consumer與broker確認訊息的方式(時機),比如當訊息被Consumer接收之後,Consumer將在何時確認訊息。對於broker而言,只有接收到ACK指令,才會認為訊息被正確的接收或者處理成功了,通過ACK,可以在consumer與Broker之間建立一種簡單的“擔保”機制.
Client端指定了ACK_MODE,但是在Client與broker在交換ACK指令的時候,還需要告知ACK_TYPE,ACK_TYPE表示此確認指令的型別,不同的ACK_TYPE將傳遞著訊息的狀態,broker可以根據不同的ACK_TYPE對訊息進行不同的操作。
比如Consumer消費訊息時出現異常,就需要向broker傳送ACK指令,ACK_TYPE為"REDELIVERED_ACK_TYPE",那麼broker就會重新發送此訊息。在JMS API中並沒有定義ACT_TYPE,因為它通常是一種內部機制,並不會面向開發者。ActiveMQ中定義瞭如下幾種ACK_TYPE(參看MessageAck類):
- DELIVERED_ACK_TYPE = 0 訊息"已接收",但尚未處理結束
- STANDARD_ACK_TYPE = 2 "標準"型別,通常表示為訊息"處理成功",broker端可以刪除訊息了
- POSION_ACK_TYPE = 1 訊息"錯誤",通常表示"拋棄"此訊息,比如訊息重發多次後,都無法正確處理時,訊息將會被刪除或者DLQ(死信佇列)
- REDELIVERED_ACK_TYPE = 3 訊息需"重發",比如consumer處理訊息時丟擲了異常,broker稍後會重新發送此訊息
- INDIVIDUAL_ACK_TYPE = 4 表示只確認"單條訊息",無論在任何ACK_MODE下
- UNMATCHED_ACK_TYPE = 5 BROKER間轉發訊息時,接收端"拒絕"訊息
到目前為止,我們已經清楚了大概的原理: Client端在不同的ACK_MODE時,將意味著在不同的時機發送ACK指令,每個ACK Command中會包含ACK_TYPE,那麼broker端就可以根據ACK_TYPE來決定此訊息的後續操作.
上面這一段呢就是:ACK_MODE與ACK_TYPE. 想要更多的瞭解,有興趣的可以自行去看看,這裡由於本文的重點是怎麼實現,具體原理,可以自行了解一下。
-
2.實現訊息確認:
-
1.首先在配置檔案中配置你的應答方式是什麼。我這裡配置的是點對點的訊息確認方式。
-
- <!-- 訊息監聽容器 訊息接收監聽器用於非同步接收訊息 -->
- <beanid="jmsContainerOne"class="org.springframework.jms.listener.DefaultMessageListenerContainer">
- <propertyname="connectionFactory"ref="connectionFactory"/>
- <propertyname="destination"ref="destinationOne"/>
- <propertyname="messageListener"ref="consumerMessageListenerOfOne"/>
- <propertyname="sessionAcknowledgeMode"value="4"></property>
- :給訊息傳送者一個迴應“我收到你的訊息了,你可以出隊了,接受失敗沒有確認成功,會在原佇列裡面”,activemq在沒有配置應答方式的時候,他是預設確認的。但是需求的各不同,就需要有不同的配置
- 以上就完成了activemq的訊息確認。
相關推薦
spring activeMQ 整合(三): 確認機制ACK(收到訊息後,應該有一個迴應也就是確認答覆)
之前寫的spring activemq整合的demo ,今天繼續完善一下這個demo,讓功能更強大。 繼上篇文章之後,我訊息傳送失敗後,可以重新發送了。但是至於別人有沒有收到,這就不得而而而知了。 這時候就要用到ACK確認機制了。 1.ACK機制:
ActiveMQ 確認機制ACK(收到消息後,應該有一個回應也就是確認答復)
ons type javax IT 消費 vid clas 成功 刪除 一、ACK機制簡介 ACK (Acknowledgement),即確認字符,在數據通信中,接收站發給發送站的一種傳輸類控制字符。表示發來的數據已確認接收無誤。 JMS API中約定了Client端可以使
Spring ActiveMQ 整合(二): 重發機制(訊息傳送失敗後的重新發送)
之前已經寫了一個spring activemq整合的demo ,今天繼續完善一下這個demo,讓功能更強大。 假如現在我手裡有一個很重要的訊息的,想要發給一個人,
spring boot 整合thyemleaf基本使用 日期的操作(三)
<!--格式化日期,預設的以瀏覽器預設語言為格式化標準--> <span th:text="${#dates.format(key)}"></span> <hr/> <!--自定義格式--> <span th:text="${#dat
(三)rabbitmq的訊息確認機制ack
接上一篇文章,在application配置檔案中新增如下配置: ## 訊息手動確認 spring.rabbitmq.listener.simple.acknowledge-mode=manual 這樣就開啟了訊息手動確認,然後再消費者端程式碼中加上如下程式碼進行業務處理完後的訊息確認刪除訊息
Spring學習之Spring三種裝配機制:(二)顯示裝配bean
今天我們介紹一下Spring三種裝配機制中的另外兩種裝配方式:JavaConfig和XML配置,這兩種方式區別於自動化裝配方式都屬於顯示裝配。 1、Java程式碼裝配bean 首先,我們通過在Config類中使用@Bean註解來宣告bean; @Bean註
Spring ActiveMQ 整合(四): JMS 事務管理
1.為什麼要用事務? 訊息事務是在生產者producer到broker或broker到consumer過程中同一個session中發生的,保證幾條訊息在傳送過程中的原子性。
spring boot 整合thyemleaf基本使用 字串的操作(二)
thyemleaf基本使用 字串的操作的基本使用,其他的以後用到可以檢視文件或者百度。 <!--在輸入框中顯示msg的值--> <input type="text" name="username" th:value="${msg}"> <hr/> <!
Java集合——HashMap(四)擴容機制——resize()
HashMap的擴容機制---resize() 雖然在hashmap的原理裡面有這段,但是這個單獨拿出來講rehash或者resize()也是極好的。 什麼時候擴容:當向容器新增元素的時候,會判斷當前容器的元素個數,如果大於等於閾值(知道這個閾字怎麼念嗎?不念fa值
檢測當前的語言環境是否使用了 UTF-8 編碼(三篇文章:先用setlocale()設定編碼,再用nl_langinfo()進行檢測。locale物件可以使用langLocale.name() == "zh_CN"判斷)
C/C++程式中,locale(即系統區域設定,即國家或地區設定)將決定程式所使用的當前語言編碼、日期格式、數字格式及其它與區域有關的設定,locale設定的正確與否將影響到程式中字串處理(wchar_t如何輸出、strftime()的格式等)。因此,對於每一個程式,都應該慎重處理locale設定。
(菜鳥來動手)SpringMVC+Spring+Mybatis整合(第三天) SSM框架整合
前一段寫了前2天的內容,本來想一個框架一個框架網上增.後來發現不好整... 這次參考網上的文章,一次將3個框架整合到一起.記錄下來. 大體步驟: 1.新建maven web 專案 2.引入jar包 3.寫業務程式碼 4.配置檔案 5.測試 開始: 一: 1)第一步直接
Spring中bean的三種裝配機制之——自動裝配
基本介紹 關於各種配置,從來沒搞懂過。但是覺得框架發展這麼快,而且結構這麼巨集大,其實現微觀上來講應該從來沒有一種標準方式、更沒有說是固定的幾種。比如Spring專有的@Component、@Autowired註解,大多數情況下都可以被javax.inje
JS節點操作 (表格在js中添加行和單元格,並有一個刪除鍵)
sed doc nod lis 姓名 ins func play 移除 1 <div id="div"> 2 <table id="tab"> 3 <tr> 4 <th&g
一名3年工作經驗的程式設計師應該具備的技能(寫得很好,果斷轉) 因為和同事有約定再加上LZ自己也喜歡做完一件事之後進行總結,因此有了這篇文章。這篇文章大部分內容都是面向整個程式設計師群體的,當然因為LZ本身是做Java開發的,因此有一部分內容也是專門面向咱們Java程式設計師的。
因為和同事有約定再加上LZ自己也喜歡做完一件事之後進行總結,因此有了這篇文章。這篇文章大部分內容都是面向整個程式設計師群體的,當然因為LZ本身是做Java開發的,因此有一部分內容也是專門面向咱們Java程式設計師的。 簡單先說一下,LZ座標杭州,13屆本科畢業,算上年前在阿
八數碼(有一個空的移動拼圖模型)
Problem J 八數碼 時限:5000ms 記憶體限制:20000K 總時限:10000ms 描述: 在九宮格里放在1到8共8個數字還有一個是空格,與空格相鄰的數字可以移動到空格的位置,問給定的狀態最少需要幾步能到達目標狀態(用0表示空格): 1 2 3 4
VC/C++、HTML、Java、SQL、JSP、SSH、SSM等等的英語單詞(看了很多遍都會忘記意思或讀音,只知道大概用來幹嘛的)
C++、HTML、Java、SQL、JSP、SSH、SSM等等學習過程中遇到的英語單詞(看了很多遍都會忘記意思或讀音,只知道大概用來幹嘛的) 在這裡記錄下來,方便檢視(有道詞典的死粉),順序A~Z(首字母大寫的單詞也是)【我找到的"程式設計開發常用的英語單詞"文章分享給大家
小程式自學筆記(零基礎學小程式彙總)---史上最全的微信小程式學習筆記,筆記看我你也就學會小程式了
一,建立模組化工具類我們可以將一些公共的程式碼抽離成為一個單獨的js檔案,作為一個模組。模組只有通過module.exports才能對外暴露介面。微信官方給出的demo中列印儲存log日誌用的utils.js用的就是模組化// common.jsfunction sayHe
前端筆記(使用html\css\jquery造n*n的格子,根據預算購買到最多的商品)
需求:建立一個n*n的格子,n是輸入框的數字,點選重渲染可以重新畫一個n*n的格子,滑鼠移入格子中,對應的格子背景設變成紅色,點選對應的格子,背景色變成藍色,再點一次還原顏色。 要造格子有好幾種方式,可以用table、ul和li,或者直接使用完全的div 這裡為了方便理解,我使用ul和li。
三種免費的拍照翻譯識別文字方法,總有一種適合你!
在工作的時候也會遇見圖片格式的檔案吧,有時候需要得要上的文字、有的時候需要將圖片上的檔案進行翻譯,那怎樣將圖片識別圖片馬上的文字?怎樣對圖片上的文字進行翻譯呢?今天小編就是來解決大家的疑問的,一起來看看吧。 方法一: 1.先整理好需要識別或者翻譯的圖片檔案,然後在應用市場裡找到如下的工具。
【Spring Cloud 原始碼解讀】之 【這也太神奇了,RestTemplate加上一個@LoadBalanced註解就能實現負載均衡!】
前提概要: 前天,有個前端大佬問了我兩個問題:為啥不引入Ribbon依賴就能使用Ribbon?為啥RestTemplate加上@LoadBalanced註解就能負載均衡了?我也表示很疑惑,而我自己其實也真的沒去了解過,所以趁著工作不太忙,趕緊去研究一波。 第一個問題比較簡單,一般都是其他依賴引入了Ribbon