在 Lettuce 和 AsyncHttpClient 之间共享 Netty NioEventLoopGroup

Share Netty NioEventLoopGroup between Lettuce & AsyncHttpClient

我的应用程序使用的是 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 跨所有组件以减少线程数?

异步 Http 客户端

AsyncHttpClient httpClient = new DefaultAsyncHttpClient(new DefaultAsyncHttpClientConfig.Builder().setEventLoopGroup(myEventGroup).build())

生菜

添加RedisEventLoopGroupProviderclass

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