在Lettuce和&之间分享Netty NioEventLoopGroup。 AsyncHttpClient

时间:2016-12-23 12:12:38

标签: redis netty asynchttpclient

我的应用程序使用的是Netty 4.1.6.Final和Lettuce 4.3.0Async 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交叉所有组件以减少线程数?

1 个答案:

答案 0 :(得分:2)

异步Http客户端

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);