附录 A. acceptor 和 Connector 配置参数


下表详细介绍了一些用于配置 Netty 网络连接的可用参数。参数及其值附加到连接字符串的 URI 中。如需更多信息,请参阅在 网络连接中配置接收器和连接器。每个表按名称列出参数,并记录这些参数是否与接收器或连接器一起使用。例如,您只能在 acceptors 中使用一些参数。

注意

所有 Netty 参数都在类 org.apache.activemq.artemis.core.remoting.impl.netty.TransportConstants 中定义。源代码可以在客户门户网站 上下载。http://access.redhat.com/downloads

Expand
表 A.1. Netty TCP 参数
参数与…​ 一起使用描述

batchDelay

两者都

在将数据包写入接受者或连接器之前,可将代理配置为批量写入最多 batchDelay 毫秒。这可提高非常小的消息的整体吞吐量。它确实会牺牲消息传输的平均延迟增加。默认值为 0 ms。

connectionsAllowed

acceptors

限制接受者允许的连接数量。当达到这个限制时,会为日志发出 DEBUG 级别的消息,连接被拒绝。使用的客户端类型决定了连接被拒绝时会发生什么。默认值为 -1, 这意味着接受者允许的连接数量没有限制。

directDeliver

两者都

当消息到达服务器并传送到等待消费者时,默认情况下,发送会在与消息到达的同一线程上进行。这在具有相对较小的消息和少量消费者的环境中提供了很好的延迟,但以总体吞吐量和可扩展性为代价,特别是在多核机器上。如果您希望获得最低延迟并可能降低吞吐量,那么您可以将默认值用于 directDeliver,即 true。如果您要对延迟进行一些小的额外点击,但希望最高吞吐量设置为 false

handshake-timeout

acceptors

防止未授权客户端打开大量连接并保持打开状态。由于每个连接都需要一个文件句柄,所以它会消耗资源,然后可供其他客户端使用。

此超时限制连接可以消耗资源的时间,而无需经过身份验证。验证连接后,您可以使用资源限制设置来限制资源消耗。

默认值为 10 秒。您可以将其设置为任何其他整数值。您可以通过将选项设置为 0 或负整数来关闭这个选项。

编辑超时值后,您必须重启代理。

localAddress

连接器

指定客户端在连接到远程地址时使用的本地地址。这通常用于应用服务器,或者在运行嵌入式时用于控制用于出站连接的地址。如果没有设置本地地址,则连接器将使用任何可用的本地地址。

localPort

连接器

指定客户端在连接到远程地址时使用的本地端口。这通常用于应用服务器,或者在运行嵌入式时用于控制用于出站连接的端口。如果使用默认值,即 0,则连接器将让系统获取临时端口。有效端口为 0 到 65535

nioRemotingThreads

两者都

当配置为使用 NIO 时,代理默认使用与处理传入的数据包所报告的内核数(或超线程)相同的线程数。如果要覆盖这个值,您可以通过指定此参数来设置线程数量。此参数的默认值为 -1,这表示使用通过 从 Runtime.getRuntime().availableProcessors() * 3 获得的值。

tcpNoDelay

两者都

如果为 true,则禁用 Nagle 的算法。这是 Java (客户端)套接字选项。默认值为 true

tcpReceiveBufferSize

两者都

确定 TCP 接收缓冲区的大小(以字节为单位)。默认值为 32768

tcpSendBufferSize

两者都

确定 TCP 发送缓冲区的大小(以字节为单位)。默认值为 32768

应根据网络的带宽和延迟调整 TCP 缓冲区大小。

总的 TCP 发送/接收缓冲区大小应计算为:

buffer_size = bandwidth * RTT.

其中带宽每秒字节数,网络往返用时(RTT)以秒为单位。可以使用 ping 实用程序轻松测量 RTT。

对于快速网络,您可能想要从默认值增加缓冲区大小。

Expand
表 A.2. Netty HTTP 参数
参数与…​ 一起使用描述

httpClientIdleTime

acceptors

在发送空 HTTP 请求前,客户端可以闲置多久,以保持连接处于活动状态。

httpClientIdleScanPeriod

acceptors

扫描空闲客户端的频率(以毫秒为单位)。

httpEnabled

acceptors

不再需要。有了单一端口支持,代理现在将自动检测是否使用 HTTP 并配置其自身。

httpRequiresSessionId

两者都

如果为 true,则客户端在第一次调用后将等待一个会话 ID。当 HTTP 连接器连接到 servlet 接受器时使用。不建议使用此配置。

httpResponseTime

acceptors

服务器在发送空 HTTP 响应前可以等待的时间,以保持连接处于活动状态。

httpServerScanPeriod

acceptors

扫描需要响应的客户端的频率,以毫秒为单位。

Expand
表 A.3. Netty TLS/SSL 参数
参数与…​ 一起使用描述

enabledCipherSuites

两者都

用于 SSL 通信的密码套件的逗号分隔列表。

指定客户端应用程序支持的最安全密码套件。如果您指定了代理和客户端通用的、以逗号分隔的密码套件列表,或者您没有指定任何密码套件、代理和客户端相互协商要使用的密码套件。如果您不知道要指定哪个密码套件,您可以首先与以 debug 模式运行的客户端建立 broker-client 连接,以验证代理和客户端通用的密码套件。然后,在代理上配置 enabledCipherSuites

可用的密码套件取决于代理和客户端使用的 TLS 协议版本。如果在升级代理后默认 TLS 协议版本有变化,您可能需要选择早期的 TLS 协议版本,以确保代理和客户端可以使用通用密码套件。如需更多信息,请参阅 enabledProtocols

enabledProtocols

两者都

用于 SSL 通信的 TLS 协议版本的逗号分隔列表。如果没有指定 TLS 协议版本,代理将使用 JVM 的默认版本。

如果代理使用 JVM 的默认 TLS 协议版本,且升级代理后该版本会改变,代理和客户端使用的 TLS 协议版本可能会不兼容。虽然建议您使用更新的 TLS 协议版本,但您可以在 enabledProtocols 中指定较早的版本,以便与不支持较新的 TLS 协议版本的客户端进行交互。

forceSSLParameters

连接器

控制是否在连接器上设置为参数设置的任何 SSL 设置,而不是 JVM 系统属性(包括 javax.net.ssl 和 AMQ Broker 系统属性)来为这个连接器配置 SSL 上下文。

有效值为 true 或者 false。默认值为 false

keyStorePassword

两者都

在 acceptor 上使用时,这是服务器端密钥存储的密码。

在连接器中使用时,这是客户端密钥存储的密码。这只有在您使用双向 SSL (即 mutual 身份验证)时与连接器相关。虽然可以在服务器上配置这个值,但它被下载并供客户端使用。如果客户端需要使用与服务器上设置的不同密码,那么它可以使用 customary javax.net.ssl.keyStorePassword 系统属性或 ActiveMQ 特定的 org.apache.activemq.ssl.keyStorePassword 系统属性来覆盖服务器端设置。如果客户端上的另一个组件已使用标准的 Java 系统属性,则特定于 ActiveMQ 的系统属性非常有用。

keyStorePath

两者都

当在接受人上使用时,这是包含服务器证书的服务器上 SSL 密钥存储的路径(无论是由权威自签名还是由权威签名)。

当在连接器中使用时,这是包含客户端证书的客户端 SSL 密钥存储的路径。这只有在您使用双向 SSL (即 mutual 身份验证)时与连接器相关。虽然在服务器上配置了这个值,但它被下载并供客户端使用。如果客户端需要使用与服务器上设置的不同路径,那么它可以使用 customary javax.net.ssl.keyStore 系统属性或特定于 ActiveMQ 的 org.apache.activemq.ssl.keyStore 系统属性来覆盖服务器端设置。如果客户端上的另一个组件已使用标准的 Java 系统属性,则特定于 ActiveMQ 的系统属性非常有用。

keyStoreAlias

两者都

当在接受器上使用时,这是在客户端连接时,密钥存储中要存在的键的别名。在连接器中使用时,这是当客户端连接到时,密钥存储中要存在的键的别名。这只适用于使用双向 SSL (即 mutual 身份验证)的连接器。

needClientAuth

acceptors

告知客户端连接到此接收器,或者需要双向 SSL。有效值为 true 或者 false。默认值为 false

sslEnabled

两者都

必须 true 才能启用 SSL。默认值为 false

sslAutoReload

acceptors

如果设置为 true,代理会检查对 SSL 配置的更改,如密钥存储和信任存储路径,并在检测到更改时自动重新载入配置。默认值为 false。代理检查更改的时间间隔由 configuration-file-refresh-period 元素的值决定。如需更多信息,请参阅 Reloading 配置更新

trustManagerFactoryPlugin

两者都

定义实现 org.apache.activemq.artemis.api.core.TrustManagerFactoryPlugin 的类名称。

这是一个简单的接口,它有一个返回 javax.net.ssl.TrustManagerFactory 的方法。当底层 javax.net.ssl.ssl.SSLContext 初始化时,TrustManagerFactory 会被使用。这允许精细自定义代理和客户端信任的人员。

trustManagerFactoryPlugin 的值优先于应用到信任管理器的所有其他 SSL 参数(即 trustAll,truststoreProvider,truststorePath,truststorePassword, 和 crlPath)。

您需要将任何指定的插件放在代理的 Java 类路径上。您可以使用 &lt ;broker_instance_dir> /lib 目录,因为它默认为 classpath 的一部分。

trustStorePassword

两者都

在接收器中使用时,这是服务器端信任存储的密码。只有在使用双向 SSL (即 mutual 身份验证)时,这才与接受者相关。

当在连接器中使用时,这是客户端信任存储的密码。虽然可以在服务器上配置这个值,但它被下载并供客户端使用。如果客户端需要使用与服务器上设置的不同密码,那么它可以使用 customary javax.net.ssl.trustStorePassword 系统属性或 ActiveMQ 特定的 org.apache.activemq.ssl.trustStorePassword 系统属性来覆盖服务器端设置。如果客户端上的另一个组件已使用标准的 Java 系统属性,则特定于 ActiveMQ 的系统属性非常有用。

sniHost

两者都

当在接收器中使用时,sniHost 是一个正则表达式,用于匹配传入 SSL 连接中的 server_name 扩展(有关此扩展的更多信息,请参阅 https://tools.ietf.org/html/rfc6066)。如果名称不匹配,则拒绝与接收器的连接。如果发生此情况,则会记录 WARN 消息。

如果传入连接不包含 server_name 扩展,则接受连接。

在连接器中使用时,sniHost 值用于 SSL 连接上的 server_name 扩展。

sslProvider

两者都

用于在 JDKOPENSSL 之间更改 SSL 提供程序。默认值为 JDK

如果设置为 OPENSSL,您可以在 classpath 中添加 netty-tcnative,以使用原生安装的 OpenSSL。

如果要使用通过 OpenSSL 支持的特殊 ciphersuite-elliptic curve 组合,但没有通过 JDK 供应商支持,这个选项很有用。

trustStorePath

两者都

当用于接受者时,这是包含服务器信任的所有客户端的密钥的服务器端 SSL 密钥存储的路径。只有在使用双向 SSL (即 mutual 身份验证)时,这才与接受者相关。

当在连接器中使用时,这是客户端 SSL 密钥存储的路径,其中包含客户端信任的所有服务器的公钥。虽然可以在服务器上配置这个值,但它被下载并供客户端使用。如果客户端需要使用与服务器上设置的不同路径,那么它可以使用 customary javax.net.ssl.trustStore 系统属性或特定于 ActiveMQ 的 org.apache.activemq.ssl.trustStore 系统属性来覆盖服务器端设置。如果客户端上的另一个组件已使用标准的 Java 系统属性,则特定于 ActiveMQ 的系统属性非常有用。

useDefaultSslContext

连接器

允许连接器使用 "default" SSL 上下文(通过 SSLContext.getDefault ()),它可以通过客户端以编程方式设置(通过 SSLContext.setDefault (SSLContext))。

如果此参数设为 true,则忽略 sslEnabled 以外的所有其他与 SSL 相关的参数。有效值为 true 或者 false。默认值为 false

verifyHost

两者都

在连接器中使用时,服务器 SSL 证书的 CN 或 Subject Alternative Name 值会与连接到的主机名进行比较,以验证它们是否匹配。这对单向和双向 SSL 都很有用。

当在接收器中使用时,连接客户端的 SSL 证书的 CN 或 Subject Alternative Name 值会与其主机名进行比较,以验证它们是否匹配。这仅适用于双向 SSL。

有效值为 true 或者 false。连接器的默认值为 true,接受器的默认值是 false

wantClientAuth

acceptors

告知客户端连接到此接收器,或者请求双向 SSL,但不需要。有效值为 true 或者 false。默认值为 false

如果属性 needClientAuth 设为 true,则该属性具有优先权,并且 wantClientAuth 将被忽略。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部