【问题标题】:Cloudant - Connection PoolingCloudant - 连接池
【发布时间】:2017-01-30 10:16:23
【问题描述】:

我正在尝试使用 cloudant 数据库进行连接池。据我了解,cloudant 数据库固有地使用默认参数 max_connections = 6 进行连接池。max_connections code。所需的代码 sn-p 在第 130 行。

我有一个使用 akka-http 用 scala 编写的工作应用程序,初始化如下:

val client: CloudantClient = ClientBuilder.account(<accountdetails>)
.username(<my user name>)
.password(<my password>).maxConnections(20)
.build()
println("creating database")
val db: Database = client.database("exampledb", false)
println("created");

我的问题是,我如何确认连接池是否按预期工作,例如来自示例学生数据库的基本 get 函数。

【问题讨论】:

    标签: scala database-connection ibm-cloud connection-pooling cloudant


    【解决方案1】:

    我认为 akka-http 不会在这里产生影响,除非它取代了 java.netHttpURLConnectionCloudantClient 使用java.net.HttpURLConnection 类与 Cloudant 数据库进行通信。 HttpURLConnection 的实现默认由 JVM 提供,如果您添加了该依赖项,则由 OkHttp 提供。根据documentation for connection pooling,无论您是否使用可选的 OkHttp 客户端,行为都会发生变化。 maxConnections method 仅在您使用 OkHttp 依赖项时更改连接池大小。对于默认的 HttpURLConnection,池大小由 JVM 属性配置。

    根据this documentation,可以为 java-cloudant 客户端启用日志记录。由于池的使用对客户端代码是透明的,如果您想验证连接是从池中创建还是租用,您将需要记录底层HttpURLConnection。有关默认 HttpURLConnection 的日志字符串的更多信息,请参见例如 this answer

    如果您担心池化是否有效,您还可以在this issue 上找到相关的讨论。默认的 JVM 实现会在很短的空闲时间后从池中清除连接。

    【讨论】:

    • 感谢您的回复。对不起,但没有完全理解你。那么,如果我不包含 Okhttp 依赖项,连接池会不起作用吗?另外,我浏览了这个链接:gitlab.com/Guy1394/java-cloudant/tree/…,根据我在“资源共享”部分的理解,我认为连接池应该可以工作。不是吗?感谢您的宝贵时间
    • 如果不包含 OkHttp,连接池仍然有效,但是否启用以及池的大小由 JVM 属性 http.maxConnectionshttp.keepAlive 控制(参见 reference ) 不是ClientBuilder.maxConnections 方法。
    • 您提供的 gitlab 链接也是旧版本的分支。官方的 java-cloudant repo 是 here 并包含指向 javadoc 的链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    相关资源
    最近更新 更多