• 大小: 4KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-04-03
  • 语言: Java
  • 标签: RabbitMQ  连接池  java  

资源简介

RabbitMQ客户连接池的Java实现。我们刚开始也是采用这种方式来实现的,但做压力测试时,发现这种每次新建Connection和新建Channel是非常耗时的,在大并发下,一般都要8毫秒左右,慢的话,好多都是几十毫秒。因此我们创建了Java的RabbitMQ的连接池对象。

资源截图

代码片段和文件信息

package com.eduwest.pool;

import java.io.IOException;  
import java.io.InputStream;  
import java.net.URL;
import java.util.Properties;  
import java.util.Vector;

import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class ConnectionWrapper
{
private static ConnectionWrapper factory = null;   

private static final int INIT_SIZE = 20; //连接池初始化大小  

private static final int MAX_SIZE = 1000; //连接池的最大值  

private String driver;  

private String url;  

private String username;  

private String password;  

private long activeTime = 5000;  

private Vector connectPool = null;//存放数据库连接的向量  

public ConnectionWrapper() {  
  //初始化连接的配置  
  this.initProperties();  
  //初始化数据库的连接池  
  this.initPool();  
}  

private void initProperties() {  
  Properties dbPro = new Properties();  
  InputStream input = this.getClass().getResourceAsStream(“mqconnection.properties“); 
  try {  
      dbPro.load(input); 
      this.url = dbPro.getProperty(“url“);  
      this.username = dbPro.getProperty(“username“);  
      this.password = dbPro.getProperty(“password“); 
     
  } catch (Exception e) {  
      e.printStackTrace();  
  }  
}  

private void initPool() {  
  if(null == connectPool) {  
      //创建数据库连接池  
      connectPool = new Vector(INIT_SIZE);  
      //循环创建数据库连接  
      for (int i = 0; i < INIT_SIZE; i++) {  
          MQConnection db = new MQConnection(url username password);  
          System.out.println(“创建了MQConnection连接“);  
          connectPool.add(db);  
      }  
  }  
}  

public static synchronized ConnectionWrapper getConnectionWrapper() {  
  if(null == factory) {  
      factory = new ConnectionWrapper();  
  }  
  return factory;  
}  

public MQConnection createNewConectionTimer() {  
  //此方法的作用是:当获取连接的时候,如果连接不够了,才会执行这个方法创建连接  
  synchronized (connectPool) {  
      MQConnection db = new MQConnectionTimer(driver url username password activeTime);  
      System.out.println(“创建了MQConnectionTimer连接“);  
      connectPool.add(db);  
      return db;  
  }  
}  

public Connection getConnection() {  
  System.out.println(“此时连接池中还有的连接数: “ + connectPool.size());  
  synchronized (connectPool) {  
      Connection conn = null;  
      MQConnection db = null;  
      while(true) {  
          //循环查找空闲的连接,直到找到位置  
          for (int i = 0; i < connectPool.size(); i++) {  
              db = connectPool.get(i);  
              if(!db.isUsed()) {  
                  System.out.println(“有空闲的连接“);  
                  //此连接处于空闲状态  
                  if(db instanceof MQConnectionTimer) {  
                      //System.out.println(“取得的链接是MQConnectionTimer“);  
                      //如果db是MQConnectionTimer对象  
                      MQConnectionTimer dbTimer = (MQConnectionTimer)db;  
                      dbTimer.cacel(); //取消定时  
                      conn =db.getConn(); 
  

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       5424  2017-11-22 17:44  ConnectionWrapper.java

     文件       1952  2017-11-21 11:03  MQConnection.java

     文件         54  2017-11-22 15:40  mqconnection.properties

     文件        935  2017-11-21 11:02  MQConnectionTimer.java

     文件        856  2017-11-21 10:50  MQConTimerTask.java

     文件       2727  2017-11-22 17:52  RabbitMQServer.java

----------- ---------  ---------- -----  ----

                11948                    6


评论

共有 条评论