我的应用程序使用的是Netty 4.1.6.Final和Lettuce 4.3.0,Async Http Client 2.1.0
Lettuce 4.3.0也依赖于netty 4.1.6.Final。 Async Http Client 4.3.0也依赖于netty 4.1.4.Final。
现在我看到Lettuce创建了它的线程池。 Async Http Client也会创建其线程池。我的应用程序为Netty创建了另一个线程池。
是否可以共享相同的NioEventLoopGroup
交叉所有组件以减少线程数?
答案 0 :(得分:2)
AsyncHttpClient httpClient = new DefaultAsyncHttpClient(new DefaultAsyncHttpClientConfig.Builder().setEventLoopGroup(myEventGroup).build())
添加RedisEventLoopGroupProvider
类
public class RedisEventLoopGroupProvider extends DefaultEventLoopGroupProvider {
public RedisEventLoopGroupProvider() {
super(3);
// TODO Auto-generated constructor stub
}
@SuppressWarnings("unchecked")
@Override
public <T extends EventLoopGroup> T allocate(Class<T> type) {
if (NioEventLoopGroup.class.equals(type)) {
return (T)myEventGroup;
}
return super.allocate((Class<T>)type);
}
}
以这种方式初始化
RedisClient redisClient = RedisClient.create( DefaultClientResources.builder()
.eventLoopGroupProvider(new RedisEventLoopGroupProvider())
.ioThreadPoolSize(1)
.computationThreadPoolSize(3)
.build(), Environment.REDIS_CONNECTION);