【问题标题】:Connection pool for ActiveMQActiveMQ 的连接池
【发布时间】:2020-02-12 10:57:00
【问题描述】:

通常,在 DBMS 的连接池中,有数百个连接是可以接受的,有时更可取。

看网上的例子,我总是看到只有几个连接的连接池和大量与连接关联的会话。

这是因为到 ActiveMQ 的连接有点昂贵吗?

【问题讨论】:

    标签: activemq connection-pooling


    【解决方案1】:

    数据库和 JMS 连接通常被认为是“昂贵的”,通常应该被池化。

    在池用例中,池中的连接数实际上是由您的性能要求、硬件容量等定义的。它通常通过基准测试和调整来优化。性能和资源利用率之间几乎总是需要权衡取舍,因此找到合适的平衡点是您的工作。即使是针对池大小的一般性建议也很难,因为用例可能差异很大。

    在非池用例中,值得注意的是,单个 JMS 连接可以同时为多个会话提供服务(尽管会话本身不能同时使用)。与 JMS 连接相比,创建 JMS 会话的成本要低得多。因此,在非池化用例中,将 JMS 连接数减少到尽可能低并利用多个会话通常是有意义的。

    除了一些连接设置之外,所有实质性的 JMS 客户端工作都是通过会话完成的。 JDBC 连接没有这样的“会话”概念。大部分工作直接在连接对象上完成。因此,我不确定这里的比较是否真的有效。

    【讨论】:

    • 我可能遗漏了一些东西。我需要一个会话来发送消息,我需要一个连接来启动会话。当调用我的方法发送消息时,因为我不想存储连接,所以我总是从池中获取它。这意味着每次调用该方法时,我都会从池中获取连接,然后创建会话。在这种情况下,池如何创建多个会话?
    • 首先要注意的是,只有在消费消息时才需要启动连接。如果您只是发送消息,那么您不需要在连接上调用start()。 JMS 会话比连接便宜得多,因此从池中获取连接并每次都创建一个会话应该不是问题。您是否最终确定 JMS 会话创建是您应用程序的瓶颈?
    • 我更新了我的答案,以阐明对池化和非池化用例的一般建议。
    • 只是为了确保我理解你的答案,如果我在一个池用例中,池中的连接数可以而且应该足以确保它不会经常发生连接都被占用,客户端必须等待。在我的用例中,可能有数十条并发消息发送,我应该配置连接池,例如 30-50 个连接。这可以接受吗?还是太多了?
    • 很高兴知道我不需要启动和停止连接来发送消息。
    猜你喜欢
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 2017-01-07
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    相关资源
    最近更新 更多