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]。有效字串值:EFAF[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),這些腳本可於此處找到。

Apache、ActiveMQ、Apache ActiveMQ、Apache 羽毛標誌以及 Apache ActiveMQ 專案標誌皆為 The Apache Software Foundation 的商標。版權 © 2024,The Apache Software Foundation。採用 Apache License 2.0 授權。