main
HuangHai 2 months ago
parent fe9be3557d
commit 16cd61f881

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

Loading…
Cancel
Save