日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

ActiveMQ相关存储介绍

發(fā)布時(shí)間:2024/4/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ActiveMQ相关存储介绍 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?ActiveMQ 的存儲(chǔ):

ActiveMQ 在 queue 中存儲(chǔ) Message 時(shí),采用先進(jìn)先出順序(FIFO)存儲(chǔ)。同一時(shí)間一個(gè)消息被分派給單個(gè)消費(fèi)者,且只有當(dāng) Message 被消費(fèi)并確認(rèn)時(shí),它才能從存儲(chǔ)中刪除。

對(duì)于持久化訂閱者來(lái)說(shuō),每個(gè)消費(fèi)者獲得 Message 的副本。為了節(jié)省存儲(chǔ)空間,Provider 僅存儲(chǔ)消息的一個(gè)副本。持久化訂閱者維護(hù)了指向下一個(gè) Message 的指針,并將其副本分派給消費(fèi)者。以這種方式實(shí)現(xiàn)消息存儲(chǔ),因?yàn)槊總€(gè)持久化訂閱者可能以不同的速率消費(fèi) Message,或者它們可能不是全部同時(shí)運(yùn)行。此外,因每個(gè) Message 可能存在多個(gè)消費(fèi)者,所以在它被成功地傳遞給所有持久化訂閱者之前,不能從存儲(chǔ)中刪除。

表格形式展現(xiàn)

消息類型是否持久化是否有Durable訂閱者(持久)消費(fèi)者延遲啟動(dòng)時(shí),消息是否保留Broker重啟時(shí),消息是否保留
QueueN-YN
QueueY-YY
TopicNNNN
TopicNYYN
TopicYNNN
TopicYYYY


?ActiveMQ 常用的存儲(chǔ)方式

1.KahaDB

ActiveMQ 5.3 版本起的默認(rèn)存儲(chǔ)方式。KahaDB存儲(chǔ)是一個(gè)基于文件的快速存儲(chǔ)消息,設(shè)計(jì)目標(biāo)是易于使用且盡可能快。它使用基于文件的消息數(shù)據(jù)庫(kù)意味著沒(méi)有第三方數(shù)據(jù)庫(kù)的先決條件。

要啟用 KahaDB 存儲(chǔ),需要在 activemq.xml 中進(jìn)行以下配置:

12345<broker brokerName="broker" persistent="true" useShutdownHook="false">????????<persistenceAdapter>????????????????<kahaDB directory="${activemq.data}/kahadb" journalMaxFileLength="16mb"/>????????</persistenceAdapter></broker>

2.AMQ

與 KahaDB 存儲(chǔ)一樣,AMQ存儲(chǔ)使用戶能夠快速啟動(dòng)和運(yùn)行,因?yàn)樗灰蕾囉诘谌綌?shù)據(jù)庫(kù)。AMQ 消息存儲(chǔ)庫(kù)是可靠持久性和高性能索引的事務(wù)日志組合,當(dāng)消息吞吐量是應(yīng)用程序的主要需求時(shí),該存儲(chǔ)是最佳選擇。但因?yàn)樗鼮槊總€(gè)索引使用兩個(gè)分開(kāi)的文件,并且每個(gè) Destination 都有一個(gè)索引,所以當(dāng)你打算在代理中使用數(shù)千個(gè)隊(duì)列的時(shí)候,不應(yīng)該使用它。

12345678<persistenceAdapter>????????<amqPersistenceAdapter????????????????directory="${activemq.data}/kahadb"????????????????syncOnWrite="true"????????????????indexPageSize="16kb"????????????????indexMaxBinSize="100"????????????????maxFileLength="10mb" /></persistenceAdapter>

3.JDBC

選擇關(guān)系型數(shù)據(jù)庫(kù),通常的原因是企業(yè)已經(jīng)具備了管理關(guān)系型數(shù)據(jù)的專長(zhǎng),但是它在性能上絕對(duì)不優(yōu)于上述消息存儲(chǔ)實(shí)現(xiàn)。事實(shí)是,許多企業(yè)使用關(guān)系數(shù)據(jù)庫(kù)作為存儲(chǔ),是因?yàn)樗麄兏敢獬浞掷眠@些數(shù)據(jù)庫(kù)資源。

123456789101112131415<beans>????????<broker brokerName="test-broker" persistent="true" xmlns="http://activemq.apache.org/schema/core">????????????????<persistenceAdapter>????????????????????????<jdbcPersistenceAdapter dataSource="#mysql-ds"/>????????????????</persistenceAdapter>????????</broker>????????<bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">????????????????<property name="driverClassName" value="com.mysql.jdbc.Driver"/>????????????????<property name="url" value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/>????????????????<property name="username" value="activemq"/>????????????????<property name="password" value="activemq"/>????????????????<property name="maxActive" value="200"/>????????????????<property name="poolPreparedStatements" value="true"/>????????</bean></beans>

4.內(nèi)存存儲(chǔ)

內(nèi)存消息存儲(chǔ)器將所有持久消息保存在內(nèi)存中。在僅存儲(chǔ)有限數(shù)量 Message 的情況下,內(nèi)存消息存儲(chǔ)會(huì)很有用,因?yàn)?Message 通常會(huì)被快速消耗。在 activemq.xml 中將 broker 元素上的 persistent 屬性設(shè)置為 false 即可。

12345<broker brokerName="test-broker" persistent="false" xmlns="http://activemq.apache.org/schema/core">????????<transportConnectors>????????????????<transportConnector uri="tcp://localhost:61635"/>????????</transportConnectors></broker>

講講 ActiveMQ 的部署模式

1.單例模式

這個(gè)就不啰嗦了,略過(guò)。

2.無(wú)共享主從模式

這是最簡(jiǎn)單的 Provider 高可用性的方案,主從節(jié)點(diǎn)分別存儲(chǔ) Message。從節(jié)點(diǎn)需要配置為連接到主節(jié)點(diǎn),并且需要特殊配置其狀態(tài)。

所有消息命令(消息,確認(rèn),訂閱,事務(wù)等)都從主節(jié)點(diǎn)復(fù)制到從節(jié)點(diǎn),這種復(fù)制發(fā)生在主節(jié)點(diǎn)對(duì)其接收的任何命令生效之前。并且,當(dāng)主節(jié)點(diǎn)收到持久消息,會(huì)等待從節(jié)點(diǎn)完成消息的處理(通常是持久化到存儲(chǔ)),然后再自己完成消息的處理(如持久化到存儲(chǔ))后,再返回對(duì) Producer 的回執(zhí)。

從節(jié)點(diǎn)不啟動(dòng)任何傳輸,也不能接受任何客戶端或網(wǎng)絡(luò)連接,除非主節(jié)點(diǎn)失效。當(dāng)主節(jié)點(diǎn)失效后,從節(jié)點(diǎn)自動(dòng)成為主節(jié)點(diǎn),并且開(kāi)啟傳輸并接受連接。這是,使用 failover 傳輸?shù)目蛻舳司蜁?huì)連接到該新主節(jié)點(diǎn)。

Broker 連接配置如下:

1failover://(tcp://masterhost:61616,tcp://slavehost:61616)?randomize=false

但是,這種部署模式有一些限制,

  • 主節(jié)點(diǎn)只會(huì)在從節(jié)點(diǎn)連接到主節(jié)點(diǎn)時(shí)復(fù)制其活動(dòng)狀態(tài),因此當(dāng)從節(jié)點(diǎn)沒(méi)有連接上主節(jié)點(diǎn)之前,任何主節(jié)點(diǎn)處理的 Message 或者消息確認(rèn)都會(huì)在主節(jié)點(diǎn)失效后丟失。不過(guò)你可以通過(guò)在主節(jié)點(diǎn)設(shè)置 waitForSlave 來(lái)避免,這樣就強(qiáng)制主節(jié)點(diǎn)在沒(méi)有任何一個(gè)從節(jié)點(diǎn)連接上的情況下接受連接。
  • 就是主節(jié)點(diǎn)只能有一個(gè)從節(jié)點(diǎn),并且從節(jié)點(diǎn)不允許再有其他從節(jié)點(diǎn)。
  • 把正在運(yùn)行的單例配置成無(wú)共享主從,或者配置新的從節(jié)點(diǎn)時(shí),你都要停止當(dāng)前服務(wù),修改配置后再重啟才能生效。

在可以接受一些故障停機(jī)時(shí)間的情況下,可以使用該模式。

從節(jié)點(diǎn)配置:

123<services>????????<masterConnector remoteURI="tcp://remotehost:62001" userName="Rob" password="Davies"/></services>

此外,可以配置 shutdownOnMasterFailure 項(xiàng),表示主節(jié)點(diǎn)失效后安全關(guān)閉,保證沒(méi)有消息丟失,允許管理員維護(hù)一個(gè)新的從節(jié)點(diǎn)。

3.共享存儲(chǔ)主從模式

允許多個(gè)代理共享存儲(chǔ),但任意時(shí)刻只有一個(gè)是活動(dòng)的。這種情況下,當(dāng)主節(jié)點(diǎn)失效時(shí),無(wú)需人工干預(yù)來(lái)維護(hù)應(yīng)用的完整性。另外一個(gè)好處就是沒(méi)有從節(jié)點(diǎn)數(shù)的限制。

有兩種細(xì)分模式:

(1)基于數(shù)據(jù)庫(kù)

它會(huì)獲取一個(gè)表上的排它鎖,以確保沒(méi)有其他 ActiveMQ 代理可以同時(shí)訪問(wèn)數(shù)據(jù)庫(kù)。其他未獲得鎖的代理則處于輪詢狀態(tài),就會(huì)被當(dāng)做是從節(jié)點(diǎn),不會(huì)開(kāi)啟傳輸也不會(huì)接受連接。


(2)基于文件系統(tǒng)

需要獲取分布式共享文件鎖,linux 系統(tǒng)下推薦用 GFS2。? ? ? ? ? ??

看到這些干貨,成小胖欣喜若狂一邊聽(tīng)一邊記,等老王講完后他還沒(méi)記完。而老王則趁機(jī)喝了杯鐵觀音潤(rùn)潤(rùn)嗓子。

在記錄完老王所講的部署模式后,成小胖也不好意思再讓老王繼續(xù)講下去了,畢竟他知道老王常年加班腰間盤突出,不能長(zhǎng)時(shí)間站著。

“王哥您坐著休息下,我再給您講講我所理解的 ActiveMQ 的網(wǎng)絡(luò)連接,中不中?”

“中。沒(méi)事兒,我身體好著呢~”老王知道成小胖擔(dān)心他的腰,但他還是那個(gè)倔脾氣。成小胖也不敢多耽誤時(shí)間,立馬開(kāi)講。

1.代理網(wǎng)絡(luò)

支持將 ActiveMQ 消息代理鏈接到不同拓?fù)?#xff0c;這就是被人們熟知的代理網(wǎng)絡(luò)。

ActiveMQ 網(wǎng)絡(luò)使用存儲(chǔ)和轉(zhuǎn)發(fā)的概念,其中消息總是存儲(chǔ)在本地代理中,然后通過(guò)網(wǎng)絡(luò)轉(zhuǎn)發(fā)到另一個(gè)代理。? ? ? ? ? ??

當(dāng)連接建立后,遠(yuǎn)程代理將把包含其所有持久和活動(dòng)消費(fèi)者目的地的信息傳遞給本地代理,本地代理根據(jù)信息決定遠(yuǎn)程代理感興趣的 Message 并將它發(fā)送給遠(yuǎn)程代理。

如果希望網(wǎng)絡(luò)是雙向的,您可以使用網(wǎng)絡(luò)連接器將遠(yuǎn)程代理配置為指向本地代理,或?qū)⒕W(wǎng)絡(luò)連接器配置為雙工,以便雙向發(fā)送消息。

12345678<networkConnectors>????????<networkConnector uri="static://(tcp://backoffice:61617)"??????????????????????????????name="bridge"??????????????????????????????duplex="true"??????????????????????????????conduitSubscriptions="true"??????????????????????????????decreaseNetworkConsumerPriority="false">????????</networkConnector></networkConnectors>

注意,配置的順序很重要:

1.網(wǎng)絡(luò)連接——需要在消息存儲(chǔ)前建立好連接,對(duì)應(yīng) networkConnectors 元素
2.消息存儲(chǔ)——需要在傳輸前配置好,對(duì)應(yīng) persistenceAdapter 元素
3.消息傳輸——最后配置,對(duì)應(yīng) transportConnectors 元素

2.網(wǎng)絡(luò)發(fā)現(xiàn)

(1)動(dòng)態(tài)發(fā)現(xiàn)

使用多播來(lái)支持網(wǎng)絡(luò)動(dòng)態(tài)發(fā)現(xiàn)。配置如下:

123<networkConnectors>    <networkConnector uri="multicast://default"/></networkConnectors>

其中,multicast:// 中的默認(rèn)名稱表示該代理所屬的組。因此使用此方式時(shí),強(qiáng)烈推薦你使用一個(gè)獨(dú)特的組名,避免你的代理連接到其他不相關(guān)代理。

(2)靜態(tài)發(fā)現(xiàn)

靜態(tài)發(fā)現(xiàn)接受代理 URI 列表,并將嘗試按列表中確定的順序連接到遠(yuǎn)程代理。

123<networkConnectors>    <networkConnector uri="static:(tcp://remote-master:61617,tcp://remote-slave:61617)"/></networkConnectors>

相關(guān)配置如下:

  • initialReconnectDelay:默認(rèn)值1000,表示嘗試連接前的時(shí)延。
  • maxReconnectDelay:默認(rèn)值30000,表示連接失敗后到重新建立連接之間的時(shí)延,僅在 useExponentialBackOff 啟用時(shí)生效。
  • useExponentialBackOff:默認(rèn)值 true,如果啟用,表示每次失敗后增加重建連接的時(shí)延。
  • backOffMultiplier:默認(rèn)值2,表示啟用 useExponentialBackOff 后每次的時(shí)延增量需要注意的是,網(wǎng)絡(luò)連接將始終嘗試建立到遠(yuǎn)程代理的連接。

需要注意的是,網(wǎng)絡(luò)連接將始終嘗試建立到遠(yuǎn)程代理的連接。

(3)多連接場(chǎng)景? ? ? ? ? ?

當(dāng)網(wǎng)絡(luò)負(fù)載高時(shí),使用多連接很有意義。但是你需要確保不會(huì)重復(fù)傳遞消息,這可以通過(guò)過(guò)濾器來(lái)實(shí)現(xiàn)。

12345678910111213141516<networkConnectors>    <networkConnector uri="static://(tcp://remotehost:61617)"??????????????????????????????name="queues_only"??????????????????????????????duplex="true"        <excludedDestinations>            <topic physicalName=">"/>        </excludedDestinations>    </networkConnector>    <networkConnector uri="static://(tcp://remotehost:61617)"??????????????????????????????name="topics_only"??????????????????????????????duplex="true"        <excludedDestinations>            <queue physicalName=">"/>        </excludedDestinations>    </networkConnector></networkConnectors>

講完后成小胖如釋重負(fù),因?yàn)樯厦孢@些知識(shí)點(diǎn)雖然看起來(lái)很少,但他卻花了很多時(shí)間看了很多英文資料,同時(shí)反復(fù)實(shí)踐才理解透的呢。

在成小胖講的這段時(shí)間,老王一直坐在轉(zhuǎn)椅上,這會(huì)兒他的腰也舒服了很多。老王站起來(lái)拍了拍成小胖的肩膀:“這個(gè)知識(shí)點(diǎn)雖然理解起來(lái)有點(diǎn)晦澀,但是你解釋得還是挺不錯(cuò)的。通過(guò)今天的交流,可以看出你對(duì) ActiveMQ 的基礎(chǔ)知識(shí)有了不錯(cuò)的掌握,今后呢還是要多加深入實(shí)踐,這樣才能使用它提供高質(zhì)量的服務(wù)?!?/p>

老王的手機(jī)突然響了,是要去開(kāi)會(huì)了:“今天就到這兒吧,我有個(gè)會(huì)議要參加?!?/p>

“好,謝謝王哥的耐心指導(dǎo)。希望你多注意身體?!?/p>

老王鬼魅的一笑:“嗯,放心吧,隔壁有對(duì)年輕人剛結(jié)婚,聽(tīng)Ta們說(shuō)最近想要個(gè)小baby,所以我肯定會(huì)保養(yǎng)好自己的身體的?!?/p>

成小胖:“……”

“哈哈,開(kāi)玩笑的!”

“……”

10

相關(guān)文章

  • 消息中間件收錄集
  • Java消息隊(duì)列-Spring整合ActiveMq
  • ActiveMQ + ZooKeeper 集群高可用配置
  • Spring+Log4j+ActiveMQ實(shí)現(xiàn)遠(yuǎn)程記錄日志——實(shí)戰(zhàn)+分析
  • Sping+ActiveMQ整合
  • ActiveMQ簡(jiǎn)述
  • Netty那點(diǎn)事(1)概述
  • 跟我學(xué)Spring3(13.3):測(cè)試之集成測(cè)試
  • Java調(diào)優(yōu)經(jīng)驗(yàn)談
  • 與Service實(shí)現(xiàn)雙向通信(上)

發(fā)表評(píng)論

Name*郵箱*網(wǎng)站 (請(qǐng)以 http://開(kāi)頭)

(*) 表示必填項(xiàng)

提交評(píng)論

3 條評(píng)論

  • abao2018/01/04 下午 6:17

    有點(diǎn)像小說(shuō),哈哈哈哈哈

    ?0??0

    回復(fù)
  • yang2018/01/25 下午 12:34

    像是在講故事,過(guò)程很不錯(cuò)

    ?2??0

    回復(fù)
  • YL Jerry2018/03/02 下午 3:54

    感覺(jué)是來(lái)搞笑的

    ?0??3

    回復(fù)
  • ? Spring Boot & Spring MVC 異常處理的N種方法zookeeper 入門系列 – 理論基礎(chǔ) – zab 協(xié)議 ?

    0如何定位那些SQL產(chǎn)生了大量的redo...

    1使用FastBootWeixin框架快速開(kāi)發(fā)...

    2跨平臺(tái)長(zhǎng)連接組件設(shè)計(jì)及可插拔改造

    3MyBatis 解析 XML 標(biāo)簽及占...

    4一次非典型性 Redis 阻塞總結(jié)

    5談?wù)?JDK8 中的字符串拼接

    6基于Multiple treatment的營(yíng)銷評(píng)估...

    7Java日志框架:slf4j作用及其實(shí)現(xiàn)原...

    8基于接口設(shè)計(jì)與編程

    9從 Spring Cloud 看一個(gè)微服務(wù)...

    0Transaction 在 Controller 層...

    1JDK 10 的 109 項(xiàng)新特性

    2在 Java 8 中避免 Null 檢查

    3Java 8 和 Java 9 中并發(fā)工具...

    4通向架構(gòu)師的道路(第二十二天)萬(wàn)能框架spri...

    5MySQL分頁(yè)優(yōu)化中的“INNER...

    6Java 虛擬機(jī) 6:內(nèi)存溢出和內(nèi)存泄露、并行和并發(fā)、...

    7如何定位那些SQL產(chǎn)生了大量的redo...

    820 個(gè)使用 Java CompletableFutu...

    9Spring AOP 的實(shí)現(xiàn)機(jī)制

    android23days?Android開(kāi)發(fā)?AOP?APIArrayList?ConcurrentHashMap?Eclipse?GCGuava?Hadoop?HashMap?HashSet?HBaseHibernate?IntelliJ?io?Java?java8?java 8Java9?Java NIO?Java編程入門?JDBC?JDK?JMXJPA?Jsoup?JUnit?JVM?Lambda?log4j?mavenMybatis?mysql?Netty?nio?oracle?ORM?redisRESTful?Scala?Servlet?Socket?solr?Springspringboot?spring boot?Spring MVCSpringMVC?Spring Security?SSH?Stringsynchronized?TestNG?ThreadLocal?Tomcatvolatile?Web Service?Zookeeper?事務(wù)?內(nèi)存管理分布式?動(dòng)態(tài)代理?單元測(cè)試?反射?垃圾回收?基礎(chǔ)技術(shù)?多線程?字符串?字節(jié)碼?并發(fā)?并發(fā)編程序列化?異常?異常處理?性能?性能優(yōu)化?性能調(diào)優(yōu)?教程?數(shù)據(jù)結(jié)構(gòu)?日志?架構(gòu)?架構(gòu)師?死鎖?泛型?注解?測(cè)試?游戲?源碼分析?算法?線程?線程池?緩存?自動(dòng)化測(cè)試?虛擬機(jī)?設(shè)計(jì)模式?資訊?集合?面試?面試題

    最新評(píng)論

    • Re:?Java垃圾回收機(jī)制Hi,請(qǐng)到伯樂(lè)在線的小組發(fā)帖提問(wèn),支持微信登錄。鏈接是: http://group.jobbole....唐尤華
    • Re:?Java垃圾回收機(jī)制String str = new String(\"hello\");SoftReference sr ...qiaolin
    • Re:?Java垃圾回收機(jī)制Object aobj = new Object ( ) ;Object bobj = new Ob...qiaolin
    • Re:?Transaction 在 Controller...受教了,感謝分享馬俊
    • Re:?如何定位那些SQL產(chǎn)生了大量的re...受教了,加油!www.wuliaokankan.cn
    • Re:?Java8系列之重新認(rèn)識(shí)HashMap是我發(fā)錯(cuò)了哈...才發(fā)現(xiàn)屈定
    • Re:?在 Java 8 中避免 Null ...沒(méi)有if判斷簡(jiǎn)單直觀www.wuliaokankan.cn
    • Re:?JDK 10 的 109 項(xiàng)新特性我還在用8www.wuliaokankan.cn



    總結(jié)

    以上是生活随笔為你收集整理的ActiveMQ相关存储介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。