Astyanax ConnectionPool setMaxConnsPerHost

时间:2013-01-29 19:35:49

标签: cassandra astyanax

我对配置Astyanax连接池的方式感到困惑。 我使用以下配置我的池。

public final int CONNECTION_POOL_SIZE_PER_HOST = 1;
private String conecPoolName = "xxxx";
private String ipSeeds = "xxxxx";
private String clusterName = "xxxxx";
private String keyspaceName = "xxxxx";
private Keyspace keyspace;

private ConnectionPoolConfigurationImpl conPool;

public DMPAstyanaxConfPool() throws DMPException {
    conPool = new ConnectionPoolConfigurationImpl(conecPoolName).setMaxConnsPerHost(
            CONNECTION_POOL_SIZE_PER_HOST).setSeeds(ipSeeds);

    AstyanaxContext<Keyspace> context = new AstyanaxContext.Builder().forCluster(clusterName)
            .forKeyspace(keyspaceName)
            .withAstyanaxConfiguration(new AstyanaxConfigurationImpl().setDiscoveryType(NodeDiscoveryType.NONE))
            .withConnectionPoolConfiguration(conPool)
            .withConnectionPoolMonitor(new CountingConnectionPoolMonitor())
            .buildKeyspace(ThriftFamilyFactory.getInstance());

    context.start();
    keyspace = context.getEntity();
}

大多数属性都很容易理解,但我不确定setMaxConnsPerHost究竟是什么设置的。在我的机器中,我使用多线程应用程序创建几个cassandra连接并且它工作正常,即使setMaxConnsPerHost设置为1.此外,我知道cassandra服务器中有一个配置允许我们设置最大连接数和最大值每台主机的连接数。

服务器配置和此配置是否相关?否则,这个设置究竟是什么意思?

1 个答案:

答案 0 :(得分:1)

来自java docs:

  

为单个主机池分配的最大连接数

ConnectionPoolConfigurationImpl(conecPoolName)setMaxConnsPerHost配置每个主机可以拥有的主机数。

public ConnectionPoolConfigurationImpl setMaxConnsPerHost(int maxConns) {
    Preconditions.checkArgument(maxConns > 0, "maxConnsPerHost must be >0");
    //this relates to connections per each node.
    this.maxConnsPerPartition = maxConns;
    return this;
}

还有setMaxConns用于设置池中允许的最大连接数:

  

池中的最大连接数,未被所有连接池实现使用

public ConnectionPoolConfigurationImpl setMaxConns(int maxConns) {
    this.maxConns = maxConns;
    return this;
}

应使用哪一个取决于您的connection pool implementation type

但遗憾的是,setMaxConnsPerHostsetMaxConns似乎都缺乏文档。