1. 程式人生 > >ActiveMQ的可靠性機制的相關概念介紹

ActiveMQ的可靠性機制的相關概念介紹

1、確認JMS訊息

        只有在被確認之後,才認為已經被成功地消費了。訊息的成功消費通常包含三個階段:客戶接收訊息、客戶處理訊息和訊息被確認。 在事務性會話中,當一個事務被提交的時候,確認自動發生。在非事務性會話中,訊息何時被確認取決於建立會話時的應答模式(acknowledgement mode)。該引數有以下三個可選值:
         

          • Session.AUTO_ACKNOWLEDGE。

                   當客戶成功的從receive方法返回的時候,或者從MessageListener.onMessage方法成功返回的時候,會話自動確認客戶收到的訊息。
         • Session.CLIENT_ACKNOWLEDGE。

                   客戶通過訊息的acknowledge方法確認訊息。需要注意的是,在這種模式中,確認是在會話層上進行:確認一個被消費的訊息將自動確認所有已被會話消費的訊息。例如,如果一個訊息消費者消費了10個訊息,然後確認第5個訊息,那麼所有10個訊息都被確認。

1、生產者,設定簽收模式為Session.CLIENT_ACKNOWLEDGE
// 通過Connection物件建立Session會話(上下文環境物件),
// 引數一,表示是否開啟事務
// 引數二,表示的是簽收模式,一般使用的有自動簽收和客戶端自己確認簽收
Session session = connection.createSession(Boolean.FALSE,
Session.CLIENT_ACKNOWLEDGE);

2、消費者,設定簽收模式為Session.CLIENT_ACKNOWLEDGE
// 通過Connection物件建立Session會話(上下文環境物件),
		// 引數一,表示是否開啟事務
		// 引數二,表示的是簽收模式,一般使用的有自動簽收和客戶端自己確認簽收
		Session session = connection.createSession(Boolean.FALSE,
				Session.CLIENT_ACKNOWLEDGE);

3、消費者,在消費訊息的時候,返回一個確認
// 使用Session來建立訊息物件的生產者或者消費者
MessageConsumer createConsumer = session.createConsumer(destination);
while (true) {
TextMessage textMessage = (TextMessage) createConsumer.receive();
if (textMessage == null)
break;
// 客戶端的簽收模式,
textMessage.acknowledge();
System.out.println("收到的內容為" + textMessage.getText());
}





         • Session.DUPS_ACKNOWLEDGE。

                   該選擇只是會話遲鈍的確認訊息的提交。如果JMS Provider失敗,那麼可能會導致一些重複的訊息。如果是重複的訊息,那麼JMS Provider必須把訊息頭的JMSRedelivered欄位設定為true。


2、持久化

      JMS 支援以下兩種訊息提交模式:
            • PERSISTENT。

                       指示JMS Provider持久儲存訊息,以保證訊息不會因為JMS Provider的失敗而丟失。
            • NON_PERSISTENT。

                       不要求JMS Provider持久儲存訊息。

3、優先順序

         可以使用訊息優先順序來指示JMS Provider首先提交緊急的訊息。優先順序分10個級別,從0(最低)到9(最高)。如果不指定優先順序,預設級別是4。需要注意的是,JMS Provider並不一定保證按照優先順序的順序提交訊息。

4、訊息過期

        可以設定訊息在一定時間後過期,預設是永不過期。

#在生產者傳送訊息的過程中,可以指定deliveryMode傳輸模式,priority訊息優先順序,timeToLive訊息過期時間

void send(Message message, int deliveryMode, int priority, long timeToLive );

         其中,deliveryMode為傳輸模式,priority為訊息優先順序,timeToLive為訊息過期時間。

         ActiveMQ支援兩種訊息的傳送模式,PERSISTENT和NON_PERSISTENT兩種。如果不指定傳輸模式,預設的就是持久化訊息。如果容忍訊息丟失,那麼可以使用非持久化的訊息機制以改善效能和減少開銷。

         訊息優先順序從0-9十個級別,0-4是普通訊息,5-9是加急訊息。如果不指定優先順序,預設為4.JMS不要求嚴格按照這十個優先順序傳送訊息,但必須保證加急訊息要優先於普通訊息到達。

         預設情況下,訊息永不會過期。如果訊息在特定週期內失去意義,那麼可以設定過期時間,單位為毫秒。

               // 5、使用Session來建立訊息物件的生產者或者消費者
		MessageProducer messageProducer = session.createProducer(null);

		// 6、最後使用JMS規範的TextMessage形式建立資料(通過Session物件)
		// 並利用MessageProducer的send方法傳送資料
		for (int i = 0; i < 5; i++) {
			TextMessage textMessage = session.createTextMessage();
			textMessage.setText("我是訊息" + i);

			// 7、在傳送訊息的時候,指定訊息的目的地,持久化方式,優先順序,以及訊息的過期時間

			messageProducer.send(destination, textMessage,
					DeliveryMode.NON_PERSISTENT, i, 1000 * 60);
		}

5、臨時目的地

         可以通過會話上的createTemporaryQueue方法和createTemporaryTopic方法來建立臨時目的地。它們的存在時間只限於建立它們的連線所保持的時間。只有建立該臨時目的地的連線上的訊息消費者才能夠從臨時目的地中提取訊息。


6、持久訂閱

        首先訊息生產者必須使用PERSISTENT提交訊息。客戶可以通過會話上的createDurableSubscriber方法來建立一個持久訂閱,該方法的第一個引數必須是一個topic,第二個引數是訂閱的名稱。 JMS Provider會儲存釋出到持久訂閱對應的topic上的訊息。如果最初建立持久訂閱的客戶或者任何其它客戶使用相同的連線工廠和連線的客戶ID、相同的主題和相同的訂閱名再次呼叫會話上的createDurableSubscriber方法,那麼該持久訂閱就會被啟用。JMS Provider會象客戶傳送客戶處於非啟用狀態時所釋出的訊息。 持久訂閱在某個時刻只能有一個啟用的訂閱者。持久訂閱在建立之後會一直保留,直到應用程式呼叫會話上的unsubscribe方法。


7、本地事務

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

相關推薦

ActiveMQ可靠性機制相關概念介紹

1、確認JMS訊息         只有在被確認之後,才認為已經被成功地消費了。訊息的成功消費通常包含三個階段:客戶接收訊息、客戶處理訊息和訊息被確認。 在事務性會話中,當一個事務被提交的時候,確認自動發生。在非事務性會話中,訊息何時被確認取決於建立會話時的應答模式(ac

webservice學習總結(一)-- WebService相關概念介紹

IT strong 資源 fire 求和 log AC service服務 為什麽 一、WebService是什麽? 基於Web的服務:服務器端整出一些資源讓客戶端應用訪問(獲取數據) 一個跨語言、跨平臺的規範(抽象) 多個跨平臺、跨語言的應用間通信整合的方案(實際)

activemq訊息機制和持久化介紹

前面一節簡單學習了activemq的使用,我們知道activemq的使用方式非常簡單有如下幾個步驟: 建立連線工廠 建立連線 建立會話 建立目的地 建立生產者或消費者 生產或消費訊息 關閉生產

Activiti - 工作流相關概念介紹

工作流是什麼? 工作流(Workflow)是對工作流程及各操作步驟之間業務規則的抽象、概括描述 工作流建模: 將工作流程中的工作如何前後組織在一起的邏輯和規則,在計算機中以恰當的模型表達並對其實施計算 要解決的問題是為實現某個業務目標,利用計算機在多個參與者之間按某種預定規則自動傳遞

O2O,B2B,C2C等相關概念介紹

概念介紹: O2O:線上到線下(online to offline),代表:美團外賣,糯米網, B2B:企業對企業的電子商務模式(business to business),代表:阿里巴巴集團網 C2C:消費者對消費者的電子商務模式(Consumer To Consumer),代表:

(一) RabbitMQ實戰教程(面向Java開發人員)之RabbitMQ相關概念介紹

前言 因為專案組需要對RabbitMQ的使用進行優化,所以系統化的學習了RabbitMQ,寫下本系列部落格的目的是希望能幫助到後續使用RabbitMQ的同學少走彎路,在閱讀本部落格前我希望您已經對RabbitMQ有基本的瞭解。本篇部落格主要面向JAVA開發人員

java 大資料以及Hadoop相關概念介紹

一、大資料的基本概念1.1、什麼是大資料大資料指的就是要處理的資料是TB級別以上的資料。大資料是以TB級別起步的。在計算機當中,存放到硬碟上面的檔案都會佔用一定的儲存空間,例如:​ 檔案佔用的儲存空間代表的就是該檔案的大小,在計算機當中,檔案的大小可以採用以下單位來表示,各個

RabbitMQ的使用(四)相關概念介紹

概念介紹 RabbitMQ是實現了高階訊息佇列協議(AMQP)的開源訊息代理軟體(亦稱面向訊息的中介軟體)。RabbitMQ伺服器是用Erlang語言編寫的,而群集和故障轉移是構建在開放電信平臺框架上的。所有主要的程式語言均有與代理介面通訊的客戶端庫。 簡單介紹:Ra

Git相關概念介紹

網上搜git的時候會看到一大堆git相關名詞:Git、Github、Gitlab、Gitblit、msysgit、egit、TortoiseGit,然後就各種頭疼~ 初學Git的朋友對於Git的一些概念和一系列衍生的東西感覺到非常難以理解,總是把一些概念給混淆,下面我總

Puppet 之 相關概念和命令介紹

puppet 概念 命令1 概述puppet是一種Linux、Unix、windows平臺的集中配置管理系統,使用自有的puppet描述語言,可管理配置文件、用戶、cron任務、軟件包、系統服務等。puppet把這些系統實體稱之為資源,puppet的設計目標是簡化對這些資源的管理以及妥善處理資源間的依賴關系

activeMq-JMS消息可靠性機制-4

consumer 提交 println 事務回滾 當前 display ons 存在 默認 消息接收確認   JMS消息只有在被確認之後,才認為已經被成功地消費了。  消息的成功消費通常包含三個階段:客戶接收消息、客戶處理消息和消息被確認。 //參數1:是否啟用事務

訊息佇列之非同步訊息基本概念以及ActiveMQ整合Spring常用用法介紹

一 簡介 (1)非同步訊息: 所謂非同步訊息,跟RMI遠端呼叫、webservice呼叫是類似的,非同步訊息也是用於應用程式之間的通訊。但是它們之間的區別是: RMI、Hession/Burlap、webservice等遠端呼叫機制是同步的。也就是說,當客戶端呼叫遠端方法時,客戶端

Hadoop MapReduce Job 相關引數設定 概念介紹與理解

Hadoop MapReduce  Job 相關引數設定 概念介紹與理解 InputFormat: 作用:將輸入的檔案分成 一個個split,並且將split 拆分成一個個<key,value

Docker學習筆記(一)docker介紹相關概念

除此之外,但從應用使用者的角度,docker也為我們帶來了極大地便利。例如,當我們在學習類似apache、nginx這類伺服器應用的時候,我們在對比學習的時候可能要在一臺機器上一個一個地進行搭建,還要進行埠的分配,資料庫配置,網站路徑設定等等一系列複雜的操作。但是通過Docker,我們只需要幾條簡單的命令,就

Android 的 Binder 機制概念介紹

 結合了以下兩篇文章的介紹,對Android 的 Binder 機制概念開始有了一定的理解。分享給大家。 -------------------------------------分割線--------------------------------- 摘要 Binder

Python相關常用庫概念介紹

關於一些常用到的python庫,在這裡收集整理一下概念,大致熟悉一下,等到遇到的時候,心裡就有個底了 time,bson,hashlib ,os,random,Image,ImageEnhance,math,smtplib,email,uuid,urllib,re,sysl

ActiveMQ(四)--JMS的可靠性機制-1

訊息接收確認 JMS訊息只有在被確認之後,才認為已經被成功地消費了。訊息的成功消費通常包含三個階段:客戶接收訊息、客戶處理訊息和訊息被確認。 在事務性會話中,當一個事務被提交的時候,確認自動發生。 在非事務性會話中,訊息何時被確認取決於建立會話時的應答模式(acknowl

activemq系列(1)-activemq相關概念

JMS: 即Java Message Service,是一種面向訊息的中介軟體(MOM:Message Oriented Middleware)。大致的過程是這樣的:傳送者把訊息傳送給訊息伺服器,訊息伺服器將訊息存放在若干佇列/主題中,在合適的時候,訊息伺服器會將訊息轉發給

Spark 介紹以及相關概念

Spark起源: Apache Spark 是專為大規模資料處理而設計的快速通用的計算引擎。Spark是UC Berkeley 加州大學伯克利AMP lab (加州大學伯克利分校的AMP實驗室)所開源的類Hadoop MapReduce的通用並行框架,Spar

微服務架構與實踐及雲原生等相關概念

定時 服務器端 body 內容 開放封閉原則 logs 方法 服務架構 binding 微服務架構與實踐 筆記:《微服務架構與實踐》 王磊 著 一 單塊架構   1 定義:對於這種功能集中、代碼和數據中心化、一個發布包、部署後運行在同一進程的應用程序,我們通常稱之為單塊架構