From 16cd61f881aaaf0d8d635abcffb44ac7eae033f7 Mon Sep 17 00:00:00 2001 From: HuangHai <10402852@qq.com> Date: Mon, 26 May 2025 20:33:42 +0800 Subject: [PATCH] 'commit' --- .../com/dsideal/Res/Plugin/MilvusPlugin.java | 56 +++++++++++-------- 1 file changed, 33 insertions(+), 23 deletions(-) diff --git a/dsRes/src/main/java/com/dsideal/Res/Plugin/MilvusPlugin.java b/dsRes/src/main/java/com/dsideal/Res/Plugin/MilvusPlugin.java index 1b597158..26645610 100644 --- a/dsRes/src/main/java/com/dsideal/Res/Plugin/MilvusPlugin.java +++ b/dsRes/src/main/java/com/dsideal/Res/Plugin/MilvusPlugin.java @@ -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(); // 释放所有连接资源 } } -} \ No newline at end of file +}