ActiveMQ筆記之ConnectionFactory

一、ActiveMQ原生的連接工程:ActiveMQConnectionFactory

       默認的maxThreadPoolSize=1000,也就是每個connection的session線程池最大值爲1000,可以根據自己應用定製。

我們一般不直接用這個連接工廠,原因是:這個connectionFactory不會複用connection、session、producer、consumer,每次連接都需要重新創建connection,再創建session,然後調用session的創建新的producer或者consumer的方法,然後用完之後依次關閉,比較浪費資源。

我們一般用這個連接工廠作爲其他擁有更高級功能(緩存)的連接工廠的參數。

二、PooledConnectionFactory

  PooledConnectionFactory會緩存connection,session,和producer,不會緩存consumer,更適合於發送者。

 

  maxConnections爲最大連接數;

  maximumActiveSessionPerConnection爲每個連接最大的會話數量。

  可以自行設置。

三、SingleConnectionFactory

  SingleConnectionFactory:對於建立JMS服務器鏈接的請求會一直返回同一個鏈接,並且會忽略Connection的close方法調用。 

四、CachingConnectionFactory

  CachingConnectionFactory繼承了SingleConnectionFactory(僅有一個Connection),所以它擁有SingleConnectionFactory的所有功能,同時它還新增了緩存功能,它可以緩存Session、MessageProducer和MessageConsumer。spring2.5.3之後推出的首選方案。

  默認情況下,cachingConnectionFactory默認只緩存一個session,針對低併發足夠。sessionCacheSize =1. 默認緩存producer、consumer。

五、JMSTemplate

  Spring提供的JMS模板是JMSTemplate,封裝了發送和接收消息的方法。可以分別設置queue或者topic的模板。

  其中,producer代碼如下:

  consumer如下:

六、JMS Listener container

1、DefaultMessageListenerContainer負責將messageListener註冊到connectionFactory的destination,一旦destination中有消息,就會將消息推送給messageListener。
2、一個DefaultMessageListenerContainer消費一個隊列。可以緩存connection/session/consumer,CacheLevel默認是Auto=4,沒有配置TransactionManager,相當於CacheConsumer級別=3,有的話爲NONE級別;(後三種一個container一個connection,所有AsyncMessageListnerInvoker共享這個connection,每個Invoker保持自己的session和consumer)

3、maxMessagesPerTask<0,遞增到線程爲maxCurrentConsumers不變;

maxMessagesPerTask >0,每個AsyncMessageListenerInvoker在執行了maxMessagePerTask輪後結束該線程,然後交給container確認是否調度該線程。(峯值過後會從maxConcurrentConsumers將到cocurrentConsumers)。

4、默認:SimpleAsyncTaskExecutor——連接不能複用;創建new Thread。建議用線程池。
可以配置maxCurrentConsumers/concurentConsumers,相當於一個consumer的多個副本。
5、 maxThreadPoolSize 最好設置的與 DefaultMessageListenerContainer.maxConcurrency 相同。
6、jms:listener-container:spring註解形式的DefaultMessageListenerContainer。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章