Activemq的端口監聽介紹及端口優化

在activemq的conf/activemq.xml主配置文件裏,有這樣一段話,如圖:

wKioL1hOO8GREhQQAAEBIUDtPqU599.png

 

這個圖裏裏的transportConnectors字段就是mq對各個網絡協議端口的規定,由圖可見,openwire這個name使用的接入端口是61616,amqp這個name的接入端口號是5672。name裏的值是隨便寫的,它也會體現在mq的web Connections界面裏,而0.0.0.0是代表本機所有設備的意思,注意這裏不可以寫127.0.0.1或者localhost,這樣寫的話mq是無法連上網的。再往後面看,後面也規定對應name的端口最大的鏈接數是1000,wireFormat.maxFrameSize的意思是「一個完整消息的大小」,這裏規定是100M。

 

這裏補充一句,Activemq默認的消息協議是openwire,他是tcp。

 

在「transportConnector」標記中,除了必須填寫的「name」屬性和「uri」屬性以外還有一些可選擇的屬性,例如:enableStatusMonitor、updateClusterClients。詳細的屬性介紹可參考官方文檔 http://activemq.apache.org/configuring-transports.html 中 「Server side options」部分章節的介紹。

 

在activemq的5.13.x裏,apache公司把這一段內容進行了簡化,變成了下面的樣子。

wKioL1hOPwegzhz7AAApmMEnsFQ441.png

那些七七八八的協議統一整合成了一個auto,對單個協議的設定也是大鍋燴了。這樣的設置由於沒有特別指定activemq的網絡監聽端口,所以它默認使用的是BIO的網絡IO模型,而對於tcp爲主的網絡架構,我們應該特別說明要用的是NIO網絡模型,所以我們更改配置如下:


wKioL1hOQIDzR7B-AAAoLpQHMg8097.png

這麼改完之後,只有tcp協議才能通過,如果除了tcp還有其他的協議怎麼辦?

 

wKioL1hORXfjoFpuAAAWhQFGPfM762.png

改成這樣就行了。

 

如果爲了彰顯逼格以及讓你的mq更加堅挺,我們還應該增加如下的字段:

1
<transportConnector name= "auto+nio"  uri= "auto+nio://0.0.0.0:61608?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600&amp;org.apache.activemq.transport.nio.SelectorManager.corePoolSize=20&amp;org.apache.activemq.transport.nio.SelectorManager.maximumPoolSize=50"  />

 

這裏還額外設置NIO使用的線程池核心工作線程數量和最大工作線程數量。