附录 A. acceptor 和 Connector 配置参数


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

注意

所有 Netty 参数都在类 org.apache.activemq.artemis.core.remoting.impl.netty.TransportConstants 中定义。源代码可从 客户门户网站 下载。

表 A.1. Netty TCP 参数
参数使用 with…​描述

batchDelay

两者

在将数据包写入接收器或连接器前,代理可以配置为批量写入最多 批处理延迟。这可提高非常小的信息的整体吞吐量。因此,消息传输的平均延迟会增加。默认值为 0 ms。

connectionsAllowed

acceptors

限制接受者允许的连接数量。达到此限制时,会向日志发出 DEBUG 级消息,并且连接将被拒绝。使用中的客户端类型决定了连接被拒绝时发生的情况。默认值为 -1, 这意味着接受者允许的连接数量没有限制。

directDeliver

两者

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

handshake-timeout

acceptors

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

此超时限制了连接在不通过身份验证的情况下可以消耗资源的时间。连接经过身份验证后,您可以使用资源限制设置来限制资源消耗。

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

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

localAddress

连接器

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

localPort

连接器

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

nioRemotingThreads

两者

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

tcpNoDelay

两者

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

tcpReceiveBufferSize

两者

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

tcpSendBufferSize

两者

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

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

在概述 TCP 发送/接收方缓冲区大小中,应计算如下:

buffer_size = bandwidth * RTT.

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

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

表 A.2. Netty HTTP 参数
参数使用 with…​描述

httpClientIdleTime

acceptors

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

httpClientIdleScanPeriod

acceptors

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

httpEnabled

acceptors

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

httpRequiresSessionId

两者

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

httpResponseTime

acceptors

在发送空 HTTP 响应前可以等待多久才能使连接保持活动。

httpServerScanPeriod

acceptors

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

表 A.3. Netty TLS/SSL 参数
参数使用 with…​描述

enabledCipherSuites

两者

用于 SSL 通信的密码套件的逗号分隔列表。默认值为空,表示将使用 JVM 的默认。

enabledProtocols

两者

用于 SSL 通信的以逗号分隔的协议列表。默认值为空,表示将使用 JVM 的默认。

forceSSLParameters

连接器

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

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

keyStorePassword

两者

在接受者中使用时,这是服务器端密钥存储的密码。

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

keyStorePath

两者

在接受者使用它时,这是持有服务器证书的服务器的 SSL 密钥存储的路径(无论是自签名还是由颁发机构签名)。

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

needClientAuth

acceptors

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

sslEnabled

两者

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

trustManagerFactoryPlugin

两者

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

这是一个简单的接口,它带有一个一个简单的接口,它返回的是 javax.net.ssl.TrustManagerFactory。当底层 javax.net.ssl.ssl.SSLContext 初始化时,TrustManagerFactory 会被使用。这可以对谁或代理和客户端信任进行精细自定义。

trustManagerFactoryPlugin 的优先级高于所有适用于信任管理器的其他 SSL 参数(即 trustAlltruststoreProvidertruststorePathtruststorePasswordcrlPath)。

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

trustStorePassword

两者

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

在连接器中使用时,这是客户端侧信任存储的密码。虽然可以在服务器上配置这个值,但它由客户端下载和使用。如果客户端需要使用与服务器上设置的不同密码,那么它可以通过使用 customary javax.net.ssl.trustStorePassword 系统属性或 ActiveMQ 特定 org.apache.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,您可以在类路径中添加 netty-tcnative,以使用原生安装的 OpenSSL。

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

trustStorePath

两者

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

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

useDefaultSslContext

连接器

允许连接器使用"默认" SSL 上下文(通过 SSLContext.getDefault()),该上下文可由客户端编程设置(通过 SSLContext.setDefault(SSLContext))。

如果此参数设为 true,则除 sslEnabled 之外,所有其他 SSL 相关参数都将被忽略。有效值为 true 或者 false。默认值为 false

verifyHost

两者

在连接器中使用时,CN 或 Subject 备用名称值会与要连接的主机名进行比较,以验证它们是否匹配。这可用于单向和双向 SSL。

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

有效值为 true 或者 false。acceptors 的连接器和 false 的默认值为 true

wantClientAuth

acceptors

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

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.