天天看點

ActiveMQ-JMS(四):回調模式下的線程模型

綜述

  • 建立連接配接時,會建立Transport、InactivityMonitor Worker、InactivityMonitor ReadCheckTimer、InactivityMonitor WriteCheckTimer四個線程。
  • 建立生産者不會建立新線程。
  • 發送消息,不會建立新線程。
  • 建立消費者會建立Session task-x線程,此線程隻在運作回調函數時存在,空閑一段時間就會被關閉。新消息到來時再重新建立。每次重新建立,x值加1。
  • 新消息到來時,如果沒有Session task-x存在,就會重新建立一個線程,用于運作回調函數。
  • 由于存在前台線程,main()函數線程退出後,應用仍然不會結束。是以要結束應用,必須調用connection.close()函數。

生産者的線程

建立ActiveMQ連接配接工廠時,沒有線程建立。

new ActiveMQConnectionFactory(brokerURL);
           

建立連接配接時,建立如下4個線程。其中Transport線程會為每個連接配接建立一個,其它3個線程隻在建立第一個連接配接的時候建立一次。

  • Thread[ActiveMQ Transport] (Running)
  • Daemon thread[ActiveMQ InactivityMonitor Worker] (running)
  • Daemon thread[ActiveMQ InactivityMonitor ReadCheckTimer] (running)
  • Deamon thread[ActiveMQ InactivityMonitor WriteCheckTimer] (running)

關閉連接配接,會結束ActiveMQ InactivityMonitor Worker線程。

connection.close()
           

消費者線程

建立消費者,會建立如下2個線程,一會兒沒有使用後,這連個線程就消失了。

- Thread[ActiveMQ Session task-1]

- Thread[ActiveMQ Session task-2]

給消費者設定回調對象,會建立一個線程

- Thread[ActiveMQ Session task-3]

consumer.setMessageListener(this);
           

繼續閱讀