activemq连接池原理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了activemq连接池原理相关的知识,希望对你有一定的参考价值。

首先来看本地通讯的情况,应用程序A和应用程序B运行于同一系统A,它们之间可以借助消息队列技术进行彼此的通讯:应用程序A向队列1发送一条信息,而当应用程序B需要时就可以得到该信息。
其次是远程通讯的情况,如果信息传输的目标改为在系统B上的应用程序C,这种变化不会对应用程序A产生影响,应用程序A向队列2发送一条信息,系统A的MQ发现Q2所指向的目的队列实际上位于系统B,它将信息放到本地的一个特殊队列-传输队列(Transmission Queue)。我们建立一条从系统A到系统B的消息通道,消息通道代理将从传输队列中读取消息,并传递这条信息到系统B,然后等待确认。只有MQ接到系统B成功收到信息的确认之后,它才从传输队列中真正将该信息删除。如果通讯线路不通,或系统B不在运行,信息会留在传输队列中,直到被成功地传送到目的
地。这是MQ最基本而最重要的技术--确保信息传输,并且是一次且仅一次(once-and-only-once)的传递。
MQ提供了用于应用集成的松耦合的连接方法,因为共享信息的应用不需要知道彼此物理位置(网络地址);不需要知道彼此间怎样建立通信;不需要同时处于运行状态;不需要在同样的操作系统或网络环境下运行。
参考技术A ActiveMQ连接池是一种机制,它可以让你在使用ActiveMQ消息队列时,可以重复使用一个连接,而不是每次都创建一个新的连接。这样可以提高性能,提高效率,减少开销。

ActiveMQ连接池本质上是一种资源池,它可以把多个ActiveMQ连接放在一个池子里,每次需要使用ActiveMQ连接时,就从池子里取出一个连接,使用完毕后再放回池子。这样就可以避免每次都要重新创建连接,提升性能。

严重困惑:ActiveMQ 是不是放弃了对连接池的支持?

【中文标题】严重困惑:ActiveMQ 是不是放弃了对连接池的支持?【英文标题】:Seriously confused: has ActiveMQ dropped support for connection pooling?严重困惑:ActiveMQ 是否放弃了对连接池的支持? 【发布时间】:2013-04-15 14:36:34 【问题描述】:

我是 ActiveMQ 的新手(我们使用 Apollo 作为代理)。我读到的所有内容都说使用 org.apache.activemq.pool.PooledConnectionFactory 作为连接池,除了 activemq-all-5.5.0.jar 中不存在该类。根据 jarfinder.com,该类仅存在于旧版本的 ActiveMQ 中。

我是否必须包含 Spring 或其他内容?一池连接如何?

谢谢

【问题讨论】:

【参考方案1】:

对于 maven 用户,这会有所帮助:

    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-client</artifactId>
        <version>$activemq.version</version>
    </dependency>
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-pool</artifactId>
        <version>$activemq.version</version>
    </dependency>

【讨论】:

【参考方案2】:

在标准 ActiveMQ 发行版中,您有 lib/optional/activemq-pool-5.8.0.jar 包含此类。

不确定 apollo,但我猜你还是使用 ActiveMQ JMS 库?

【讨论】:

就是这样,谢谢。 activemq-all-5.5.0.jar 最好命名为 activemq-almost-all-5.5.0.jar 请注意文件夹名称中的“可选”名称。但是,是的,从这个意义上说,activemq-all 可能有点误导

以上是关于activemq连接池原理的主要内容,如果未能解决你的问题,请参考以下文章

spring boot activemq消费者连接池

使用 gradle 的 JOOQ 连接池

连接池的基本原理? 以及使用连接池的好处?

连接池工作原理

数据库连接池原理详解与自定义连接池实现

连接池通俗易懂的工作原理