一、什麼時候使用activemq
1、非同步呼叫
2、一對多通訊
3、做多個系統的整合,同構、異構
4、作為rpc的替代
5、多個應用相互解耦
6、作為事件驅動架構的幕後支撐
7、為了提高系統的可伸縮性
二、優化
activemq的效能依賴於很多因素,比如:
1:網路拓撲結構,比如:嵌入、主從複製、網路連線
2:transport協議
3:service的質量,比如topic還是queue,是否持久化,是否需要重新投遞,訊息超時等
4:硬體、網路、jvm和作業系統等
5:生產者的數量,消費者的數量
6:訊息分發要經過的destination數量,以及訊息的大小等
2.1、調整prefetch limit
activemq預設的prefetch大小不同的:
1:queue consumer 預設1000
2:queue browser consumer預設500
3:persistent topic consumer預設1000
4:non-persistent topic consumer預設32767
prefecth policy設定示例如下:
1
2
3
4
5
6
7
activemqconnectionfactory cf =
new
activemqconnectionfactory();
properties props =
new
properties();
props.setproperty(
"prefetchpolicy.queueprefetch"
,
"1000"
);
props.setproperty(
"prefetchpolicy.queuebrowserprefetch"
,
"500"
);
props.setproperty(
"prefetchpolicy.durabletopicprefetch"
,
"1000"
);
props.setproperty(
"prefetchpolicy.topicprefetch"
,
"32767"
);
cf.setproperties(props);
也可以在建立destination的時候設定prefetch size,示例如下:
1
2
queue queue =
new
activemqqueue(
"test.queue?consumer.prefetchsize=10"
);
messageconsumer consumer = session.createconsumer(queue);
2.2、控制生產者流量
可以通過xml配置,**開啟方式如下:
1
cf.setproducerwindowsize(
1024000
);
2.3、關閉訊息的複製功能
能部分提高心能,在連線工廠上設定,如下:
1
2
activemqconnectionfaction cf = …..
cf.setcopymessageonsend(
false
);
2.4、調整tcp協議
tcp協議是activemq中最常使用的協議,常見有如下配置會影響協議效能:
1:socketbuffersize:socket的快取大小,預設是65536
2:tcpnodelay:預設是false
示例如:
1
2
string url = "failover://(tcp://localhost:61616?tcpnodelay=true)";
activemqconnectionfactory cf = new activemqconnectionfactory(url);
2.5、訊息自動確認
官方建議使用自動確認的模式,同時還可以開啟優化確認的選項,如下:
1
2
activemqconnectionfactory cf =
new
activemqconnectionfactory();
cf.setoptimizeacknowledge(
true
);
在消費者這邊,session會在乙個單獨的執行緒中分發訊息給消費者,如果你使用的自動確認模式,為了增加吞吐量,你可以直接通過session傳遞訊息給消費者,示例如下:
1
2
activemqconnectionfactory cf =
new
activemqconnectionfactory();
cf.setalwayssessionasync(
false
);
2.6、kahadb訊息儲存優化
如果使用kahadb進行訊息儲存的話,可以調整如下選項來優化效能:
1:indexcachesize:預設為10000,用來設定快取頁的個數,預設情況一頁是4kb,一般來說快取的大小盡可能的設定大一些,以避免記憶體不足時頻繁的交換。
2:indexwritebatchsize:預設1000,用來設定髒索引(髒索引就是cache中的index和訊息儲存中的index狀態不一樣)達到多少之後,就需要把索引儲存起來。如果你想最大化broker的速度,那麼就把這個值設定的盡可能的大一些,這樣的話,僅會在到達checkpoint的時候,索引才會被儲存起來。但是這樣會增大系統出錯的時候,丟失大量的元資料的風險。
3:journalmaxfilelength:預設32mb,當broker的吞吐量特別大的時候,日誌檔案會很快被寫滿,這樣會因為頻繁的關閉檔案,開啟檔案而導致效能低下。你可以通過調整檔案的size,減少檔案切換的頻率,從而獲得輕微的效能改善。
4:enablejournaldisksyncs:預設為true,通常,broker會在給producer確認之前,把訊息同步到磁碟上(並且確保訊息物化到磁碟上)。你可以通過設定這個選項為false,從而獲得本質的效能改善。但是這樣的話,多少會降低broker的可靠性。
三、建議
1、盡量使用基於檔案的訊息儲存方案,比如使用kahadb的方式
2、可以考慮內嵌啟動broker,這樣應用和broker之間可以使用vm協議通訊,速度快
3、盡量使用非同步投遞訊息,示例如:cf.setuseasyncsend(true);
4、非持久化訊息比持久化訊息更快
原因如下:
a:非持久化傳送訊息是非同步的,producer不需要等待consumer的receipt訊息
b:而持久化是要把訊息先儲存起來,然後再傳遞
5、transaction比non-transaction更快
我愛大金子
ActiveMQ安裝優化
activemq效能測試 2 安裝activemq 解壓壓縮包就可以直接使用 3 改動埠號 賬號password 預設連線埠為61616,按例如以下我把它改動為61617 vi conf activemq.xml name openwire uri tcp maximumconnections 10...
SQL優化常用方法25
用索引提高效率 索引是表的乙個概念部分,用來提高檢索資料的效率.實際上,oracle使用了乙個複雜的自平衡b tree結構.通常,通過索引查詢資料比全表掃瞄要快.當oracle找出執行查詢和update語句的最佳路徑時,oracle優化器將使用索引.同樣在聯結多個表時使用索引也可以提高效率.另乙個使...
MySQL效能優化必備25條
今天,資料庫的操作越來越成為整個應用的效能瓶頸了,這點對於web應用尤其明顯。關於資料庫的效能,這並不只是dba才需要擔心的事,而這更是我們程式設計師需要去關注的事情。當我們去設計資料庫表結構,對運算元據庫時 尤其是查表時的sql語句 我們都需要注意資料操作的效能。這裡,我們不會講過多的sql語句的...