`
can_do
  • 浏览: 266141 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

AMQ中池化连接工厂(PooledConnectionFactory)的用法和机制

阅读更多
>>代码示例如下:

import javax.jms.JMSException;
import javax.jms.MessageConsumer;

import com.cnd.mq.AMQSession;
import com.cnd.mq.command.AMQQueue;
import com.cnd.mq.jms.pool.PooledSession;
import com.cnd.mq.pool.PooledConnection;
import com.cnd.mq.pool.PooledConnectionFactory;

public class PooledConnectionFactoryTest {

public PooledConnectionFactory getPooledConnectionFactory(String paramUrl) {
  PooledConnectionFactory pcf = new PooledConnectionFactory(paramUrl);
  pcf.setMaxConnections(3);
  pcf.setMaximumActiveSessionPerConnection(5);
  pcf.setIdleTimeout(30);
  return pcf;

}

public static void main(String[] args) {

  PooledConnectionFactoryTest test = new PooledConnectionFactoryTest();
  String url = "tcp://cnd:61616";
  String queueName = "queue_cnd";
  // 此处以后可以通过单例的方法来调用
  PooledConnectionFactory pcf = test.getPooledConnectionFactory(url);
  for (int i = 0; i < 20; i++) {
   try {
    // 从连接池中获取PooledConnection和PooledSession的方式
    // 1.直接调用池化连接工厂中的创建连接方法==>获取到的就是池化的连接
    PooledConnection connection = (PooledConnection) pcf
      .createConnection();
    // 2.从池化连接中获取到才是池化的会话;
    PooledSession session = (PooledSession) connection
      .createSession(false, AMQSession.AUTO_ACKNOWLEDGE);
    // 3.通过池化的会话创建目标和消费者
    AMQQueue destination = (AMQQueue) session
      .createQueue(queueName);
    MessageConsumer consumer = session.createConsumer(destination);
    boolean isListenMode = true;
    if (isListenMode) {
     consumer.receiveNoWait();
     System.out.println("The " + (i + 1) + " is "
       + Thread.currentThread().getName());
     // 诠释:通过sleep后(慢放效果)可以看到,从池化的连接工厂中获取连接时,
     // 池化连接工厂提供连接的机制是,当来一个请求要创建会话时,先看是否连接已经最大,如果不是,则建一个连接并创建一个会话,
     // 否则,开始复用已经开到最大值的连接,顺序是从前面的连接开始(即:先把连接开到最大值(建立tcp),然后再开始按顺序复用连接)
     // 因为每个连接可以设置会话的大小,此测试设置Connection最大值为3,每个Connection可开
     // 会话数的最大值为5,最终,可以同时支持3*5个线程来创建消费者,即创建消费者的数量是15。
     // conn1,sess1=>conn2,sess2=>conn3,sess3=>conn1,sess4=>conn2,sess5=>conn3,sess6,......
     try {
      Thread.sleep(1500);
     } catch (InterruptedException ie) {
      ie.printStackTrace();
     }
     session.close();
    } else {
     // 如果是onMessage方式,会话是一直被占用着的,没有条件回收;
     consumer.getMessageListener();
     System.out.println("The " + (i + 1) + " is "
       + Thread.currentThread().getName());
     try {
      Thread.sleep(1500);
     } catch (InterruptedException ie) {
      ie.printStackTrace();
     }
    }
   } catch (JMSException jmse) {
    jmse.printStackTrace();
   }
  }

}

}

>>诠释如下:

>>连接池回收机制:

>>从连接池取连接时对连接上的引用数和最近使用时间的更新处理:

>>维护连接池的专属线程方法:

org.apache.commons.pool.impl.GenericKeyedObjectPool.evict()==>
以下方法:
1.activateObject()
2.validateObject()
3.destroyObject()
===>
在激活当前连接时,会判断当前连接是否为要删除的,通过方法validateObject()先判断当前是否无效,如果无效,则标记当前连接为要删除的;
如果当前连接为要删除的,则调用销毁方法destroyObject。

【温馨提示】
如果您觉得满意,可以选择支持下,您的支持是我最大的动力:

分享到:
评论

相关推荐

    java通过AMQ通讯

    总结来说,Java通过AMQ通讯涉及到了JMS规范、AMQ中间件的使用、连接工厂、连接、会话、目的地、生产者和消费者的创建。理解这些概念并能够正确配置和使用它们,是实现Java应用程序间可靠消息传递的关键。

    AMQ 实现消息队列 基本DEMO

    在Spring应用中,我们可以使用`JmsTemplate`类发送和接收消息,它提供了模板方法简化了消息操作。为了配置AMQ,我们需要在Spring的配置文件中添加必要的JMS(Java Message Service)信息,如连接工厂、目的地等。 ...

    AMQ样例,参考

    标题中的“AMQ样例,参考”提示我们,这是一个关于ActiveMQ应用的示例,用于指导用户理解如何在实际环境中部署和使用ActiveMQ。ActiveMQ是Apache软件基金会开发的一个开源消息代理,它作为消息中间件,允许应用程序...

    amq最近安装包

    6. **客户端连接**:开发者可以使用各种编程语言(如Java、Python、C#等)的AMQ客户端库来连接和交互,发送和接收消息。 7. **安全性**:AMQ支持用户认证和授权,可以在 `conf/users.properties` 和 `conf/...

    AMQ接收与发送

    总结来说,"AMQ接收与发送"涵盖了ActiveMQ中的核心概念和操作,包括消息的生产和消费、接收与发送端的分离、MQ控制台的使用,以及如何在实际环境中配置和运行这些组件。理解这些知识点有助于开发者构建可靠、高效的...

    10Gtek AMQ10-SR4-M1 (JH2)V1.1.pdf

    【10Gtek AMQ10-SR4-M1(JH2)V1.1.pdf】是一款由10Gtek公司推出的40GBASE-SR QSFP+光收发器规格书,主要针对高速网络连接,特别是数据中心和高性能计算环境。这款产品支持40GBASE-SR4和QDR应用,符合QSFP+电气多源...

    ActiveMQ连接池完整封装实例工具类

    在企业级应用中,为了提高消息处理的效率和稳定性,通常会使用连接池来管理与ActiveMQ服务器的连接。本文将详细介绍如何实现一个ActiveMQ连接池的完整封装实例工具类,并探讨其背后的设计思想。 首先,我们需要了解...

    springboot+amq+javamail+maven

    SpringBoot、ActiveMQ、JavaMail和Maven是四个在IT领域中非常重要的技术组件,尤其在企业级应用开发中有着广泛的应用。让我们逐一探讨这些技术及其整合的方式。 **SpringBoot** SpringBoot是由Pivotal团队提供的一...

    spring整合amq

    2. **配置ActiveMQ**:在Spring的配置文件(通常是`applicationContext.xml`或使用Java配置)中,定义一个`JMSConnectionFactory`,这将连接到AMQ服务器。配置包括服务器地址、端口、用户名和密码等。 ```xml ...

    AMQ28-SR4-M1-V1.0

    - 适用于高性能计算环境中的高速网络连接。 3. **其他光学链路:** - 可用于多种其他类型的光学链路,如存储区域网络(SAN)等。 #### 四、绝对最大额定值 - **电源电压(Vcc):** 从-0.5V到+3.6V。 - **存储温度...

    amq-examples:此存储库包含一组与 Red Hat AMQ 消息传递套件组件一起使用的示例

    红帽 AMQ 示例 ... :使用 AMQ JMS Pool 和 TLS 连接的 Apache Camel 生产者和消费者路由 : Apache Camel 实现 :使用 TLS 连接的 Apache Camel AMQP 组件消费者 :使用 TLS 连接的 Apache Camel AMQ

    amqproxy:智能AMQP代理,具有连接和通道池重用

    AMQ代理具有AMQP连接和通道池/重用的智能AMQP代理。 例如,允许PHP客户端与上游服务器保持长期连接,从而将发布速度提高一个数量级或更多。 在AMQP协议中,如果打开连接,则客户端和服务器必须交换7个TCP程序包。 ...

    ActiveMQ(AMQ)单浏览器AJAX多页面客户端的支持(clientId)

    ActiveMQ(AMQ)是Apache软件基金会开发的一个开源消息中间件,它支持多种协议,包括OpenWire、STOMP、MQTT、AMQP等,广泛应用于分布式系统中的异步通信和解耦。在Web应用程序中,AJAX(Asynchronous JavaScript and...

    ActiveMQ Web开发 amq.js

    最新在做ActiveMQ Web端开发时,绕了很多路找到了这个插件,小编在这里就贡献了给爱学习小伙伴用。

    amq-spring-jms.pdf

    这包括创建消息代理、定义连接工厂、消息目的地以及使用模板来发送和接收消息等操作。 ActiveMQ的使用场景非常广泛,包括企业级消息传递、异步通信、工作队列、发布订阅模型、事务消息处理等。它支持广泛的消息协议...

    AMQ-Scripts:脚本的全面存储库,可提高AMQ的生活质量

    用法可以通过将大多数脚本导入浏览器扩展程序来使用它们,例如用于.js文件的和用于.css文件的 。 在特定项目的文件夹中可以找到更多信息。 design -出于审美目的通常会更改AMQ的设计/布局的脚本。 encoding -脚本,...

    RabbitMQ_Mirror机制分析

    MQ内部大致又可以分为两部分:amqqueue和Backing Queue,amqqueue负责实现AMQP协议规定的MQ的基本逻辑,Backing Queue则实现消息的存储,并将MQ中的消息以订阅或者Poll的方式交给接收方。 Backing Queue内部又细分...

    CentOS环境安装配置AMQ集群及zookeeper集群

    本文将详细介绍如何在CentOS环境中安装配置ActiveMQ (AMQ) 集群和Zookeeper集群。这两种集群技术对于分布式系统的消息传递和服务协调至关重要。通过具体步骤指导,我们将确保读者能够顺利搭建并运行这些集群。 ####...

    random-amq:一个让我搞乱amq东西的地方(animemusicquiz.com)

    然后使用amq_scraper.py脚本中保存的CSV文件获取JSON文件。 用法是: amq_scraper.py &lt;sheet&gt; 一些较旧的文件可能包含JSON错误,必须手动更正。 但是,如果您从此存储库下载JSON文件而不是再次抓取它们,则应该...

    spring-amqp-reference.pdf

    2. 标签JAVA AMQ说明文档是针对使用Java语言的开发者,而AMQ是指高级消息队列协议,这表明文档内容主要关注如何在Java应用中集成和使用AMQP。 3. 文档内容概述 - 文档前言和介绍,包括了文档使用的许可声明。 - ...

Global site tag (gtag.js) - Google Analytics