天天看點

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

在activemq的conf/activemq.xml主配置檔案裡,有這樣一段話,如圖:

<a href="http://s3.51cto.com/wyfs02/M00/8B/6B/wKioL1hOO8GREhQQAAEBIUDtPqU599.png" target="_blank"></a>

這個圖裡裡的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公司把這一段内容進行了簡化,變成了下面的樣子。

<a href="http://s3.51cto.com/wyfs02/M02/8B/6B/wKioL1hOPwegzhz7AAApmMEnsFQ441.png" target="_blank"></a>

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

<a href="http://s4.51cto.com/wyfs02/M00/8B/6B/wKioL1hOQIDzR7B-AAAoLpQHMg8097.png" target="_blank"></a>

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

<a href="http://s3.51cto.com/wyfs02/M02/8B/6B/wKioL1hORXfjoFpuAAAWhQFGPfM762.png" target="_blank"></a>

改成這樣就行了。

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

1

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

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

參考資料:http://blog.163.com/_kid/blog/static/3040547620161634230453/

 本文轉自 蘇幕遮618 51CTO部落格,原文連結:http://blog.51cto.com/chenx1242/1881924