TCP 傳輸參考
使用 ActiveMQ Classic > 設定傳輸 > ActiveMQ Classic 連接 URI > TCP 傳輸參考
TCP 傳輸
TCP 傳輸允許客戶端使用 TCP socket 連接到遠端的 ActiveMQ Classic Broker。這些設定選項可以用於調整客戶端 JMS 連接 URI 字串或 Broker 傳輸連接器 URI 底層的 TCP 傳輸。
注意:使用正確的前綴!
以下選項在 Broker 的傳輸連接器定義中使用時,應加上 transport.*
前綴。然而,在客戶端,transport.*
前綴必須省略。
設定語法
tcp://hostname:port?key=value
範例
Broker 端 (在 TransportConnector
中)
tcp://localhost:61616?transport.threadName&transport.trace=false&transport.soTimeout=60000
客戶端 (在 brokerURL
中)
tcp://localhost:61616?threadName&trace=false&soTimeout=60000
傳輸選項
選項名稱 | 預設值 | 描述 |
---|---|---|
backlog | 5000 | 指定傳輸伺服器 socket 等待接受的最大連線數。 |
closeAsync | true | 如果為 true ,則 socket 關閉呼叫會非同步進行。對於 STOMP 等協定,此參數應設定為 false ,這些協定通常用於每次讀取或寫入時建立新連線的情況。這樣做可確保 socket 關閉呼叫同步進行。同步關閉可防止 Broker 因為連線快速循環而耗盡可用的 socket。 |
connectionTimeout | 30000 | 如果 >=1 ,則該值會設定連線逾時時間 (以毫秒為單位)。值為 0 表示沒有逾時。負值會被忽略。 |
daemon | false | 如果為 true ,則傳輸執行緒將在 daemon 模式下執行。當將 Broker 嵌入到 Spring 容器或 Web 容器中時,將此參數設定為 true ,以允許容器正確關閉。 |
dynamicManagement | false | 如果為 true ,則 TransportLogger 可以由 JMX 管理。 |
ioBufferSize | 8 * 1024 | 指定 TCP 層和 OpenWire 層之間使用的緩衝區大小,其中會發生基於 wireFormat 的編組。 |
jmxPort | 1099 | (僅限客戶端) 指定 JMX 伺服器將用於管理 TransportLoggers 的埠。這應該僅由客戶端生產者或消費者透過 URI 設定,因為 Broker 會建立自己的 JMX 伺服器。指定替代的 JMX 埠對於在同一機器上測試 Broker 和客戶端並需要透過 JMX 控制兩者的開發人員很有用。 |
keepAlive | false | 如果為 true ,則在 Broker 連線上啟用 TCP KeepAlive,以防止連線在 TCP 層級逾時。這應該與 InactivityMonitor 使用的 KeepAliveInfo 訊息區分開來。 |
logWriterName | default | 設定要使用的 org.apache.activemq.transport.LogWriter 實作的名稱。名稱會對應到 resources/META-INF/services/org/apache/activemq/transport/logwriters 目錄中的類別。 |
maximumConnections | Integer.MAX_VALUE | 此 Broker 允許的最大 socket 數量。 |
minmumWireFormatVersion | 0 | 將接受的最小遠端 wireFormat 版本 (請注意拼寫錯誤)。注意:當遠端 wireFormat 版本低於設定的最小可接受版本時,將會擲回例外狀況,並且將拒絕連線嘗試。值為 0 表示不檢查遠端 wireFormat 版本。 |
socketBufferSize | 64 * 1024 | 設定接受的 socket 的讀取和寫入緩衝區大小 (以位元組為單位)。 |
soLinger | Integer.MIN_VALUE | 當值為 > -1 時,設定 socket 的選項 soLinger 。當設定為 -1 時,會停用 soLinger socket 選項。 |
soTimeout | 0 | 設定 socket 的讀取逾時時間 (以毫秒為單位)。值為 0 表示沒有逾時。 |
soWriteTimeout | 0 | 設定 socket 的寫入逾時時間 (以毫秒為單位)。如果 socket 寫入操作在指定的逾時時間之前未完成,則會關閉 socket。值為 0 表示沒有逾時。 |
stackSize | 0 | 設定傳輸背景讀取執行緒的堆疊大小。必須以 128K 的倍數指定。值為 0 表示會忽略此參數。 |
startLogging | true | 如果為 true ,則傳輸堆疊的 TransportLogger 物件一開始會將訊息寫入記錄檔。除非 trace=true ,否則會忽略此參數。 |
tcpNoDelay | false | 如果為 true ,則會設定 socket 的選項 TCP_NODELAY 。這會停用用於傳輸小型封包的 Nagle 演算法。 |
threadName | N/A | 指定此參數時,會在叫用傳輸期間修改執行緒的名稱。會附加遠端位址,以便停留在傳輸方法中的呼叫在執行緒名稱中具有目的地資訊。當使用執行緒傾印進行偵錯時,這非常有用。 |
trace | false | 會記錄透過傳輸傳送的所有命令。若要檢視記錄的輸出,請定義 Log4j 記錄器:log4j.logger.org.apache.activemq.transport.TransportLogger=DEBUG 。 |
trafficClass | 0 | 要在 socket 上設定的流量類別。 |
diffServ | 0 | (僅限客戶端) 要在傳出封包上設定的慣用差異化服務流量類別,如 RFC 2475 中所述。有效整數值:[0,64] 。有效字串值:EF 、AF[1-3][1-4] 或 CS[0-7] 。使用 JDK 6 時,僅當 JVM 使用 IPv4 堆疊時才有效。若要使用 IPv4 堆疊,請設定系統屬性 java.net.preferIPv4Stack=true 。注意:同時指定 'diffServ' 和 'typeOfService' 是無效的,因為它們在 TCP/IP 封包標頭中共享相同的位置。 |
typeOfService | 0 | (僅限客戶端) 要在傳出封包上設定的慣用服務類型值。有效整數值:[0,256] 。使用 JDK 6 時,僅當 JVM 設定為使用 IPv4 堆疊時才有效。若要使用 IPv4 堆疊,請設定系統屬性 java.net.preferIPv4Stack=true 。注意:同時指定 'diffServ' 和 'typeOfService' 是無效的,因為它們在 TCP/IP 封包標頭中共享相同的位置。 |
useInactivityMonitor | true | 當 false 時,會停用 InactivityMonitor ,且連線永遠不會逾時。 |
useKeepAlive | true | 當 true 時,會在閒置連線上傳送 KeepAliveInfo 訊息,以防止其逾時。如果此參數為 false ,如果連線在指定的時間內沒有收到任何資料,連線仍然會逾時。 |
useLocalHost | false | 當 true 時,本地連線將使用 localhost 值而非實際的本地主機名稱。在某些作業系統 (例如 OS X ) 上,無法以本地主機名稱連線,因此使用 localhost 更好。 |
useQueueForAccept | true | 當 true 時,接受的 socket 會放置在佇列中,以便使用個別執行緒進行非同步處理。 |
wireFormat | default | 要使用的 wireFormat 工廠的名稱。 |
wireFormat.* | N/A | 具有此前綴的屬性會用於設定 wireFormat 。 |
如需更多資訊,請參閱設定 Wire Formats。
差異化服務或服務類型
本系統支援設定差異化服務 (Differentiated Services),如 IETF RCF 2475 中所述。若要設定訊息代理程式,使其所有外送封包皆與入站封包的 DSCP 值相符,您需要套用 IP 表格腳本 (IP Tables scripts),這些腳本可於此處找到。