ActiveMQ學習筆記(7)----ActiveMQ支援的傳輸協議
1. 連線到ActiveMQ
Connector: Active提供的,用來實現連線通訊的功能,包括:client-to-broker,broker-to-broker.ActiveMQ允許客戶端使用多種協議來連線。
1.1 配置Transport Connecto
在conf/activemq.xml裡面,大致如下:
<transportConnectors> <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB --><transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="amqp" uri="amqp://0.0.0.0:9999?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnectorname="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> </transportConnectors>
1.2ActiveMQ 支援client-broker通訊協議如下:
1. TCP:這個也是預設使用的協議。
2. NIO
3. UDP
4. SSL
5. HTTP(S)
6.VM:如果客戶端和broker在一個虛擬機器內的話,可以通過VM協議在VM內通訊,從而減少網路傳輸的開銷。
2. ActiveMQ支援的傳輸協議和配置
2.1 Transmission Control Protocol (TCP)
1. 這是預設的broker配置,TCP的client監聽埠預設是61616
2. 在網路傳輸資料前,必須要序列化資料,訊息是通過一個叫wire protocol的來序列化成位元組流。預設情況下,ActiveMQ把wire protocol叫做OpenWire,它的目的是促使網路上的效率和資料快速互動。
3. TCP連線的URI形式:tcp://hostname:port?key=value&key=value, 加粗部分是必須的。
4. TCP傳輸的優點:
(1) TCP協議傳輸可靠性高,穩定性強。
(2) 高效性:位元組流方式傳遞,效率很高
(3) 有效性:可用性:應用廣泛,支援任何平臺
5. 所有關於Transport協議的可配置引數,可以參考
http://activemq.apache.org/configuration-version-5-transports.html
2.2 New I/O API Protocol(NIO)
1: NIO協議和TCP協議類似,但是NIO更側重於底層的訪問操作。它允許開發人員對同一資源可有更多的client呼叫和伺服器端有更多的負載。
2. 適合使用NIO協議的場景
(1) 可能有大量的Client去連線到Broker上,
一般情況下,大量的Client去連線到Broker是被作業系統的執行緒數所限制的。因此,NIO的實現比TCP需要更少的執行緒去執行,所以建議使用NIO協議。
(2) 可能對於Broker有一個很遲鈍的網路傳輸
NIO比TCP提供了更好的效能。
3. Transport Connector配置示例:
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="nio" uri="nio://0.0.0.0:61617?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
上面的的配置,示範了一個TCP協議監聽61616埠,一個NIO協議監聽61617埠。
2.3 User Datagram Protocol (UDP)
1. UDP和TCP的區別
(1) TCP是一個原始流的傳遞協議,意味著資料包是有保證的,換句話說,資料包是不會被複制和丟失的。UDP,另一方面,它是不會保證資料包的傳遞的。也就是可能會丟包的。
(2 TCP也是一個穩定可靠資料包傳遞協議,意味著資料在傳遞的過程中不會被丟失。這樣確保了在傳送和接收之間能夠可靠的傳遞。相反,UPD僅僅是一個連線協議,所以沒有可靠性之說。
2. 從上面可以得出:TCP是被用在穩定可靠的場景中,UDP通常在快速資料傳遞和不怕資料丟失的場景中使用,當ActiveMQ通過防火牆時,只能用UDP
3. UDP連線的URI形式:udp://hostname:port?key=value
4. Transport Connector配置示例:
<transportConnector name="udp" uri="udp://0.0.0.0:61618?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
2.4 Secure Sockets Layer Protocol (SSL)
1. 連線URL形式:ssl://hostname:port?key=value
2. Transport Connector配置示例
<transportConnector name="ssl" uri="ssl://0.0.0.0:61618?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
2.5 Hypertext Transfer Protocol(HTTP/HTTPS)
1. 像web和email等服務需要通過防火牆來訪問的,Http可以適用於這種場合
2. 連線的URI形式:http://hostname:port?key=value或https://hostname:port?key=value
3. Transport Connector 配置示例
<transportConnector name="http" uri="http://0.0.0.0:61618?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
2.6 VM Protocol (VM)
1. VM transport允許在vm內部通訊,從而避免了網路傳輸的開銷。這時候採用的連線不是socket連線,而是直接的方法呼叫。
2. 第一個建立VM連線的客戶會啟動一個embed VM broker,接下來所有使用相同的broker name 的vm連線都會使用這個broker.當這個broker上所有的;連線都關閉的時候,這個broker也會自動關閉。
3. 連線的URI形式:vm://brokerName?key?value
4. 在Java中嵌入的方式:
vm:broker:(tcp://localhost:6000)?brokerName=embededbroker&persistent=false,定義一個嵌入的broker名稱為embededbroker以及配置一個tcptransportconnector監聽在埠6000上。
5. 使用載入一個配置檔案來啟動broker
vm://localhost?brokerConfig=xbean:activemq.xml
實際開發中,大部分使用的都是在tcp和nio之間取捨。