学习笔记-记ActiveMQ学习摘录与心得(二)
上個周末被我玩過去了,罪過罪過,現(xiàn)在又是一個工作日過去啦,居然有些煩躁,估計(jì)這幾天看的東西有點(diǎn)雜,晚上坐下來把自己首要工作任務(wù)總結(jié)總結(jié)。上篇學(xué)習(xí)博客講了ActiveMQ的特性及安裝部署,下面先把我以前啟動AMQ遇到的問題寫出來。
data?lock問題:
這個是因?yàn)閍qm所在文件data\kahadb文件夾下的lock文件緣故,可以刪掉,再運(yùn)行就可以了。
端口被占用問題:打開服務(wù),找到Internet Connection Sharing (ICS),是ICS占用了端口使得ActiveMQ無法啟動。
--------------------------以前的問題講完,切入正題-----------------------------
關(guān)于Topic模式和Queue模式的發(fā)送和接收
首先是點(diǎn)對點(diǎn)模式:
生產(chǎn)者和消費(fèi)者都在線的就不測試了。開啟生產(chǎn)消息端,在沒有消費(fèi)端在線時發(fā)送一條消息到Activemq,
消費(fèi)端上線,接收到消息
當(dāng)存在兩個相同的消費(fèi)者時,使用點(diǎn)對點(diǎn)模式發(fā)送一條消息會怎么樣?下面一個是用winform寫的消費(fèi)者,一個是控制臺的消費(fèi)者,兩者設(shè)置的客戶端ID不同,監(jiān)聽的是同一個Queue名。winform先啟動,控制臺程序后啟動。如下圖:
接下來用生產(chǎn)者發(fā)送一條消息。
看結(jié)果
?看來兩個相同的消費(fèi)者監(jiān)聽一個Queue名,先連接上的會接收到,而這個消息只能發(fā)送給一方。
然而,我把那個接受到消息的winform程序關(guān)閉,會怎樣?
結(jié)果:,把winform程序關(guān)閉后,那個剛才沒接受到消息的控制臺程序可以接受消息了。
再把winform程序打開,兩個消費(fèi)者又同時在線,會怎樣?
結(jié)果:
結(jié)論:當(dāng)使用Queue模式發(fā)送消息時,某一個監(jiān)聽該Queue名的消費(fèi)者A上線后會與之建立一個MessageQueue,相當(dāng)于兩人直接建立了一個專用通道,一對一單獨(dú)輔導(dǎo),之后的消費(fèi)者B再來監(jiān)聽只能在該消費(fèi)者之后排隊(duì)啦,等A走了,B就成了專屬客戶,這時候A又來了,也是排隊(duì)等在B后面,等B走了才輪到A。
----分割-----
下面是廣播模式發(fā)送:
做兩個消費(fèi)者,都訂閱了生產(chǎn)者的消息,而且都不在線,生產(chǎn)者發(fā)送一條消息之后,兩個消費(fèi)者上線會怎么樣?
看兩個消費(fèi)者情況:,兩個上線都接收到了。
之后我又做了一個訂閱者在線一個不在線,兩個都在線等,都是可以接收到消息,相當(dāng)于郵箱,只要訂閱了,發(fā)布的消息都能接收到,不管你在不在線,看起來比較自由。
-----------------再一個分割線--------------
生產(chǎn)者和消費(fèi)者可以使用不同的傳輸協(xié)議來傳輸消息,ActiveMQ提供了廣泛的連接模式,包括HTTP/S、JGroups、JXTA、muticast、SSL、TCP、UDP、XMPP等。
<transportConnectors><!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB --><transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/><transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/><transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/><transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/><transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/></transportConnectors>可以看出最大連接數(shù)是1000,最大容量是100m,多種協(xié)議連接我試了下沒弄出來,可能我哪里弄錯了,路過的大牛們指點(diǎn)下吧^_^?? 還有傳輸?shù)膬?nèi)容問題,可以支持多種格式,有待嘗試后總結(jié)出來。
還測試了下發(fā)送的消息存儲位置問題,是存在內(nèi)存里嗎?我發(fā)送了幾萬條數(shù)據(jù)內(nèi)存沒有變化。可能原因是消息量過少,看不出來。。。
下面就開始寫ActiveMQ的持久化存儲模式和攔截器過濾器的使用問題。
轉(zhuǎn)載于:https://www.cnblogs.com/wuyouyu/p/3396160.html
總結(jié)
以上是生活随笔為你收集整理的学习笔记-记ActiveMQ学习摘录与心得(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在ubuntu中为程序添加图标快捷键
- 下一篇: DOM剪切板