20.2.2. 配置 Netty TCP
Netty TCP 是一个简单的、非加密的基于 TCP 套接字的传输协议。Netty TCP 可以使用旧的阻塞式 Java IO,也可以使用非阻塞式的 Java NIO。我们推荐在服务器端使用 Java NIO 以获得更好的扩充性来容纳很多并发连接。如果并发连接的数量较少,Java IO 可以获得比 NIO 更少的延迟。
我们不推荐在不信任的网络里运行 Netty TCP 连接,因为它是非加密的。使用 Netty TCP 时,所有的连接都是从客户端初始化的。
配置示例也展示了 HornetQ 的 JBoss EAP 6 实现在接收器和连接器配置里是如何使用套接字绑定的。这和 HornetQ 的独立版本不同,它要求声明专门的主机和端口。
例 20.1. Default EAP 配置里的 Netty TCP 配置示例
<connectors> <netty-connector name="netty" socket-binding="messaging"/> <netty-connector name="netty-throughput" socket-binding="messaging-throughput"> <param key="batch-delay" value="50"/> </netty-connector> <in-vm-connector name="in-vm" server-id="0"/> </connectors> <acceptors> <netty-acceptor name="netty" socket-binding="messaging"/> <netty-acceptor name="netty-throughput" socket-binding="messaging-throughput"> <param key="batch-delay" value="50"/> <param key="direct-deliver" value="false"/> </netty-acceptor> <in-vm-acceptor name="in-vm" server-id="0"/> </acceptors>
下表描述了 Netty TCP 配置属性:
属性 | 默认值 | 描述 |
---|---|---|
batch-delay | 0 毫秒 | 在将数据包写入到传输数据之前,HornetQ 可以在最大为 batch-delay 毫秒内批量处理写入操作。这通过增加消息传输的平均延迟,增加了很小型消息的总体吞吐量。 |
direct-deliver | true | 当消息到达服务器并被递送给等待的消费者时,在默认情况下,递送是在消息到达的相同线程里完成的。对于相对较小的消息和数量较少的消费者,这可以获得良好的延迟,但减少了吞吐量。对于更高的吞吐量,您可以将其设置为 “false”。 |
local-address | [local address available] | 对于 netty 连接器,它用来指定客户在连接远程地址时使用的本地地址。如果没有指定本地地址,那么连接器将使用任何可用的本地地址。 |
local-port | 0 | 对于 netty 连接器,它用来指定客户在连接远程地址时使用哪个本地端口。如果使用 local-port default(0),那么连接器将让系统选取一个临时端口,其有效值为 0 到 65535。 |
nio-remoting-threads | -1 | 如果使用 NIO,HornetQ 将默认使用三倍于核心(或 hyper-thread)数量(由 Runtime.getRuntime().availableProcessors() 确定)的线程来处理转入数据包。您可以设置自定义的值来覆盖这个值。 |
tcp-no-delay | true | 如果为 true,Nagle 算法将被启用。通过减少在网络上发送的数据包时距离,这个算法有助于提高 TCP/IP 网络的效率。 |
tcp-send-buffer-size | 32768 字节 | 这个参数确定了 TCP 发送缓冲的大小(字节) |
tcp-receive-buffer-size | 32768 字节 | 这个参数确定了 TCP 接收缓冲的大小(字节) |
use-nio | false | 如果为 true,Java 非阻塞式 NIO 将被使用。如果为 false,则使用旧的阻塞式 Java IO。如果您需要服务器处理许多并发连接,请使用非阻塞式 Java NIO,否则请使用阻塞式 Java IO。 |
注意
Netty TCP 属性对于所有类型的传输协议都是有效的(Netty SSL、Netty HTTP 和 Netty Servlet)。