ActiveMQ(25) 優化與建議

2021-09-20 16:55:59 字數 4223 閱讀 5696

一、什麼時候使用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 =newactivemqconnectionfactory();

properties props =newproperties();

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 =newactivemqqueue("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 =newactivemqconnectionfactory();

cf.setoptimizeacknowledge(true);

在消費者這邊,session會在乙個單獨的執行緒中分發訊息給消費者,如果你使用的自動確認模式,為了增加吞吐量,你可以直接通過session傳遞訊息給消費者,示例如下:

1

2

activemqconnectionfactory cf =newactivemqconnectionfactory();

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語句的...