main
HuangHai 2 months ago
parent fe9be3557d
commit 16cd61f881

@ -1,23 +1,25 @@
package com.dsideal.Res.Plugin;
import io.milvus.pool.MilvusClientV2Pool;
import io.milvus.pool.PoolConfig;
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
import lombok.Getter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.milvus.pool.MilvusClientV2Pool; // Milvus V2版本连接池类
import io.milvus.pool.PoolConfig; // 连接池配置类
import io.milvus.v2.client.ConnectConfig; // 连接配置类
import io.milvus.v2.client.MilvusClientV2; // Milvus客户端接口
import lombok.Getter; // Lombok注解自动生成getter方法
import org.slf4j.Logger; // 日志接口
import org.slf4j.LoggerFactory; // 日志工厂
import java.time.Duration; // 时间间隔类
import java.time.Duration;
@Getter
@Getter // 自动为所有字段生成getter方法
public class MilvusPlugin {
private static MilvusPlugin instance;
private static final Logger logger = LoggerFactory.getLogger(MilvusPlugin.class);
private MilvusClientV2Pool pool;
private static MilvusPlugin instance; // 单例实例
private static final Logger logger = LoggerFactory.getLogger(MilvusPlugin.class); // 日志记录器
private MilvusClientV2Pool pool; // Milvus连接池实例
// 私有构造方法,确保单例模式
private MilvusPlugin() {
}
// 获取单例实例
public static MilvusPlugin getInstance() {
if (instance == null) {
instance = new MilvusPlugin();
@ -25,19 +27,24 @@ public class MilvusPlugin {
return instance;
}
// 初始化连接池
public void init(String host, int port, int maxConnections) {
try {
// 构建连接配置
ConnectConfig connectConfig = ConnectConfig.builder()
.uri("http://" + host + ":" + port)
.uri("http://" + host + ":" + port) // 设置Milvus服务地址
.build();
// 构建连接池配置
PoolConfig poolConfig = PoolConfig.builder()
.maxIdlePerKey(10) // max idle clients per key
.maxTotalPerKey(20) // max total(idle + active) clients per key
.maxTotal(100) // max total clients for all keys
.maxBlockWaitDuration(Duration.ofSeconds(5L)) // getClient() will wait 5 seconds if no idle client available
.minEvictableIdleDuration(Duration.ofSeconds(10L)) // if number of idle clients is larger than maxIdlePerKey, redundant idle clients will be evicted after 10 seconds
.maxIdlePerKey(10) // 每个key最大空闲连接数
.maxTotalPerKey(20) // 每个key最大总连接数(活跃+空闲)
.maxTotal(100) // 所有key的总连接数上限
.maxBlockWaitDuration(Duration.ofSeconds(5L)) // 获取连接时最大等待时间
.minEvictableIdleDuration(Duration.ofSeconds(10L)) // 空闲连接最小可回收时间
.build();
// 创建连接池实例
pool = new MilvusClientV2Pool(poolConfig, connectConfig);
logger.info("Milvus连接池初始化成功最大连接数{}", maxConnections);
} catch (Exception e) {
@ -46,24 +53,27 @@ public class MilvusPlugin {
}
}
// 从连接池获取客户端连接
public MilvusClientV2 getClient() {
try {
return pool.getClient("client_name");
return pool.getClient("client_name"); // 使用固定key获取连接
} catch (Exception e) {
logger.error("获取Milvus连接失败: " + e.getMessage(), e);
throw new RuntimeException("获取Milvus连接失败", e);
}
}
// 归还客户端连接到连接池
public void returnClient(MilvusClientV2 client) {
if (client != null) {
pool.returnClient("client_name",client);
pool.returnClient("client_name",client); // 使用固定key归还连接
}
}
// 关闭连接池
public void close() {
if (pool != null) {
pool.close();
pool.close(); // 释放所有连接资源
}
}
}
}

Loading…
Cancel
Save