【发布时间】:2018-01-15 08:26:42
【问题描述】:
我正在尝试使用 netty 编写一个小型 java 客户端,用于通过 tcp 连接传输日志消息。我对netty还很陌生,所以我想知道一些事情
我将有多个队列消费者阅读消息和发送日志;可以使用一个通道,还是每个队列消费者使用一个通道?处理程序是无状态的,所有数据都发送到同一个端点——据我了解,一个通道应该是线程安全的,多个通道可能会提供更好的性能?
提前致谢!
【问题讨论】:
我正在尝试使用 netty 编写一个小型 java 客户端,用于通过 tcp 连接传输日志消息。我对netty还很陌生,所以我想知道一些事情
我将有多个队列消费者阅读消息和发送日志;可以使用一个通道,还是每个队列消费者使用一个通道?处理程序是无状态的,所有数据都发送到同一个端点——据我了解,一个通道应该是线程安全的,多个通道可能会提供更好的性能?
提前致谢!
【问题讨论】:
最后,我结合了这两种方法 - 将 FixedChannelPool 设置为可用处理器的数量(使用 NettyUtils 帮助程序类发现),目前看来运行良好!
【讨论】:
见:https://stackoverflow.com/a/28019260/3755871
多通道允许使用更多处理器内核,从而提高性能,直到通道数超过内核数。是的,单通道是线程安全的。
再一次,根据您的流量,您甚至可能不会注意到差异。
【讨论】:
有几个因素需要考虑,例如正在服务的队列数量、预期的消息总吞吐量以及消息的大小。您可以考虑使用 ChannelPool 以获得最佳性能。
【讨论】: