资源简介
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
- 上一篇:Android实现断点上传大文件
- 下一篇:ROM签名工具auto-sign.rar
相关资源
- c3p0-0.9.5.2的三个jar包 数据库连接池
- Rabbitmq工具类,java工具类RabbitmqUtil
- ElasticSearchPoolConfig.java(es连接池配置
- 配置Druid连接池需要的jar包-druid-1.0.
- jsp +SQL server用 连接池做的实验室设管
- druid-1.1.8 连接池jar包
- druid-1.1.9 连接池jar包
- dbcp Jar包135339
- RabbitMQ消息推送包括java端和andorid端
- proxool连接池用户名密码加密
- java个人资产管理系统
- java实现jdbc连接池+相关jar包
- 阿里开源数据连接池druid-1.0.12.jar
- 启程家教网站 java jsp 源代码 连接池
- RabbitMQ延时消息实现方案
- JDBC连接MySQL数据库实现增删改查(D
- 数据库连接池+MVC Dao模式实现订单管理
- JDBC线程安全的Druid数据库连接池工具
- tomcat 数据库连接池配置的jar包
- DBCP连接池所需jar包.rar
- dbcp所需jar包,DBCP 数据库连接池comm
- 一个效果非常不错的JAVA数据库连接池
-
Java通用的ba
seDao(我是用连接池做的 - rabbitmq:基于java、基于springboot、基于
- 基于JSP的人事管理系统源代码
- JDBCUtils所需的jar包实力推荐
- Redis 连接池(升级)
- rabbitmq+spring需要的jar包
- ElasticSearchPoolUtil.java(es连接池工具类
- 常用jdbc数据库连接jar包,数据库连接
评论
共有 条评论