「笔耕不辍」MQ的原理以及持久化
mq的原理是什么
消息隊(duì)列技術(shù)是分布式應(yīng)用間交換信息的一種技術(shù)。消息隊(duì)列可駐留在內(nèi)存或磁盤(pán)上,隊(duì)列存儲(chǔ)消息直到它們被應(yīng)用程序讀走。通過(guò)消息隊(duì)列,應(yīng)用程序可獨(dú)立地執(zhí)行–它們不需要知道彼此的位置、或在繼續(xù)執(zhí)行前不需要等待接收程序接收此消息。
在分布式計(jì)算環(huán)境中,為了集成分布式應(yīng)用,開(kāi)發(fā)者需要對(duì)異構(gòu)網(wǎng)絡(luò)環(huán)境下的分布式應(yīng)用提供有效的通信手段。為了管理需要共享的信息,對(duì)應(yīng)用提供公共的信息交換機(jī)制是重要的。
消息隊(duì)列為構(gòu)造以同步或異步方式實(shí)現(xiàn)的分布式應(yīng)用提供了松耦合方法。消息隊(duì)列的API調(diào)用被嵌入到新的或現(xiàn)存的應(yīng)用中,通過(guò)消息發(fā)送到內(nèi)存或基于磁盤(pán)的隊(duì)列或從它讀出而提供信息交換。消息隊(duì)列可用在應(yīng)用中以執(zhí)行多種功能,比如要求服務(wù)、交換信息或異步處理等。
中間件是一種獨(dú)立的系統(tǒng)軟件或服務(wù)程序,分布式應(yīng)用系統(tǒng)借助這種軟件在不同的技術(shù)之間共享資源,管理計(jì)算資源和網(wǎng)絡(luò)通訊。它在計(jì)算機(jī)系統(tǒng)中是一個(gè)關(guān)鍵軟件,它能實(shí)現(xiàn)應(yīng)用的互連和互操作性,能保證系統(tǒng)的安全、可靠、高效的運(yùn)行。
中間件位于用戶(hù)應(yīng)用和操作系統(tǒng)及網(wǎng)絡(luò)軟件之間,它為應(yīng)用提供了公用的通信手段,并且獨(dú)立于網(wǎng)絡(luò)和操作系統(tǒng)。
中間件為開(kāi)發(fā)者提供了公用于所有環(huán)境的應(yīng)用程序接口,當(dāng)應(yīng)用程序中嵌入其函數(shù)調(diào)用,它便可利用其運(yùn)行的特定操作系統(tǒng)和網(wǎng)絡(luò)環(huán)境的功能,為應(yīng)用執(zhí)行通信功能。
如果沒(méi)有消息中間件完成信息交換,應(yīng)用開(kāi)發(fā)者為了傳輸數(shù)據(jù),必須要學(xué)會(huì)如何用網(wǎng)絡(luò)和操作系統(tǒng)軟件的功能,編寫(xiě)相應(yīng)的應(yīng)用程序來(lái)發(fā)送和接收信息,且交換信息沒(méi)有標(biāo)準(zhǔn)方法,每個(gè)應(yīng)用必須進(jìn)行特定的編程從而和多平臺(tái)、不同環(huán)境下的一個(gè)或多個(gè)應(yīng)用通信。
例如,為了實(shí)現(xiàn)網(wǎng)絡(luò)上不同主機(jī)系統(tǒng)間的通信,將要求具備在網(wǎng)絡(luò)上如何交換信息的知識(shí)(比如用TCP/IP的socket程序設(shè)計(jì));為了實(shí)現(xiàn)同一主機(jī)內(nèi)不同進(jìn)程之間的通訊,將要求具備操作系統(tǒng)的消息隊(duì)列或命名管道(Pipes)等知識(shí)。
MQ的通訊模式
可以使用一條MQ指令將單一消息發(fā)送到多個(gè)目標(biāo)站點(diǎn),并確保為每一站點(diǎn)可靠地提供信息。MQ不僅提供了多點(diǎn)廣播的功能,而且還擁有智能消息分發(fā)功能,在將一條消息發(fā)送到同一系統(tǒng)上的多個(gè)用戶(hù)時(shí),MQ將消息的一個(gè)復(fù)制版本和該系統(tǒng)上接收者的名單發(fā)送到目標(biāo)MQ系統(tǒng)。
目標(biāo)MQ系統(tǒng)在本地復(fù)制這些消息,并將它們發(fā)送到名單上的隊(duì)列,從而盡可能減少網(wǎng)絡(luò)的傳輸量。
發(fā)布/訂閱功能使得發(fā)送者和接收者之間的耦合關(guān)系變得更為松散,發(fā)送者不必關(guān)心接收者的目的地址,而接收者也不必關(guān)心消息的發(fā)送地址,而只是根據(jù)消息的主題進(jìn)行消息的收發(fā)。
在MQ家族產(chǎn)品中,MQ Event Broker是專(zhuān)門(mén)用于使用發(fā)布/訂閱技術(shù)進(jìn)行數(shù)據(jù)通訊的產(chǎn)品,它支持基于隊(duì)列和直接基于TCP/IP兩種方式的發(fā)布和訂閱。
此外,群集中的隊(duì)列管理器之間能夠自動(dòng)進(jìn)行負(fù)載均衡,當(dāng)某一隊(duì)列管理器出現(xiàn)故障時(shí),其它隊(duì)列管理器可以接管它的工作,從而大大提高系統(tǒng)的高可靠性
mq的持久化是怎么做的;
以ActiveMq為例
ActiveMQ消息持久化方式,分別是:文件、mysql數(shù)據(jù)庫(kù)、oracle數(shù)據(jù)庫(kù)
a.文件持久化:
ActiveMQ默認(rèn)的消息保存方式,一般如果沒(méi)有修改過(guò)其他持久化方式的話可以不用修改配置文件。
如果是修改過(guò)的,打開(kāi)盤(pán)符:\apache-activemq-版本號(hào)\conf\activemq.xml,然后找到節(jié)點(diǎn),將其替換成以下代碼段
這樣就算配置完成了文件持久化方式了,重啟項(xiàng)目和ActiveMQ,發(fā)送一定消息隊(duì)列之后關(guān)閉ActiveMQ服務(wù),再啟動(dòng),你可以看到之前發(fā)送的消息未消費(fèi)的依然保持在文件里面,繼續(xù)讓監(jiān)聽(tīng)者消費(fèi)。
b.MySQL持久化
首先需要把MySql的驅(qū)動(dòng)放到ActiveMQ的Lib目錄下,我用的文件名字是:mysql-connector-java-5.1.27.jar
然后打開(kāi)盤(pán)符:\apache-activemq-版本號(hào)\conf\activemq.xml,然后找到節(jié)點(diǎn),將其替換成以下代碼段
這樣就算完成了mysql持久化配置了,驗(yàn)證方式同a,打開(kāi)mysql數(shù)據(jù)庫(kù)你能看到三張表,分別是:activemq_acks,activemq_lock,activemq_msgs。
c.Oracle持久化
oracle的配置和mysql一樣,在Lib目錄下,放入oracle的驅(qū)動(dòng)包,然后配置一下配置文件即可。總結(jié)
以上是生活随笔為你收集整理的「笔耕不辍」MQ的原理以及持久化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: N2N高级进阶使用
- 下一篇: ENSP未找到base device,是