From 28b5ca1dfcb5db21b84a7ed5fa059460f8d44567 Mon Sep 17 00:00:00 2001 From: xiaohucoding <2307520758@qq.com> Date: Sun, 25 May 2025 17:24:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=8F=91=E5=B8=83=EF=BC=88na?= =?UTF-8?q?cos=E7=89=88=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 78 +++++++++++++------ ...cationOrchestrationServiceApplication.java | 2 + .../controller/publishController.java | 78 ++++--------------- .../util/NacosServiceUtil.java | 21 +++++ src/main/resources/application.properties | 16 +--- src/main/resources/bootstrap.properties | 10 +++ 6 files changed, 105 insertions(+), 100 deletions(-) create mode 100644 src/main/java/com/bipt/intelligentapplicationorchestrationservice/util/NacosServiceUtil.java create mode 100644 src/main/resources/bootstrap.properties diff --git a/pom.xml b/pom.xml index 8255ccc..7b91012 100644 --- a/pom.xml +++ b/pom.xml @@ -2,34 +2,51 @@ 4.0.0 + org.springframework.boot spring-boot-starter-parent - 3.2.5 + 3.1.5 + com.bipt intelligent-application-orchestration-service 0.0.1-SNAPSHOT intelligent-application-orchestration-service intelligent-application-orchestration-service - - - - - - - - - - - - + 21 + + 2022.0.4 + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + com.alibaba.cloud + spring-cloud-alibaba-dependencies + 2022.0.0.0 + pom + import + + + + + org.springframework.boot spring-boot-starter-jdbc @@ -38,42 +55,53 @@ org.springframework.boot spring-boot-starter-web - org.springframework.boot spring-boot-starter-data-redis + + org.postgresql postgresql runtime + + com.kingbase8 + kingbase8 + 9.0.0 + + + org.projectlombok lombok 1.18.38 true - - com.github.pagehelper pagehelper-spring-boot-starter 1.4.7 - org.springdoc springdoc-openapi-starter-webmvc-ui - 2.3.0 + 2.3.0 - + - com.kingbase8 - kingbase8 - 9.0.0 + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + org.springframework.cloud + spring-cloud-starter-bootstrap + + + org.springframework.boot spring-boot-starter-test @@ -98,6 +126,9 @@ org.apache.maven.plugins maven-compiler-plugin + + ${java.version} + ${java.version} org.projectlombok @@ -121,5 +152,4 @@ - - + \ No newline at end of file diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/IntelligentApplicationOrchestrationServiceApplication.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/IntelligentApplicationOrchestrationServiceApplication.java index 1e18dc6..5d34a0f 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/IntelligentApplicationOrchestrationServiceApplication.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/IntelligentApplicationOrchestrationServiceApplication.java @@ -4,11 +4,13 @@ import lombok.extern.slf4j.Slf4j; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.transaction.annotation.EnableTransactionManagement; @MapperScan("com.bipt.intelligentapplicationorchestrationservice.mapper")//指定扫描Mapper接口的包 @SpringBootApplication @EnableTransactionManagement +@EnableDiscoveryClient @Slf4j public class IntelligentApplicationOrchestrationServiceApplication { diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/controller/publishController.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/controller/publishController.java index ea333da..6d98284 100644 --- a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/controller/publishController.java +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/controller/publishController.java @@ -1,8 +1,8 @@ package com.bipt.intelligentapplicationorchestrationservice.controller; -import com.bipt.intelligentapplicationorchestrationservice.config.RedisConfiguration; import com.bipt.intelligentapplicationorchestrationservice.pojo.*; import com.bipt.intelligentapplicationorchestrationservice.service.PublishService; +import com.bipt.intelligentapplicationorchestrationservice.util.NacosServiceUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; @@ -24,11 +24,9 @@ public class publishController { @Autowired private RedisTemplate redisTemplate; - /** - * 新增请求发布 - * @param servicePublishDTO - * @return - */ + @Autowired + private NacosServiceUtil nacosServiceUtil; + @PostMapping @Operation(summary ="新增发布请求") @Transactional @@ -37,70 +35,22 @@ public class publishController { publishService.save(servicePublishDTO); Long modelId = servicePublishDTO.getModelId(); String key = "Model_" + modelId; - //查询redis是否存在GPU相关资源数据 - List list; - list = (List) redisTemplate.opsForValue().get(key); - //如果存在,直接返回,无须查询数据库 - if (list != null) { - return OptResult.success(list); - }else { - list = new ArrayList<>(); - } - String modelConfig = publishService.getByModelId(modelId); - if (modelConfig == null) { - log.error("模型配置为空,modelId={}", modelId); - } - String[] keyValuePairs = modelConfig.split("\\|"); - String GPUMemorySize = null; - String GPUModel = null; - for (String pair : keyValuePairs) { - pair = pair.trim(); - if (pair.startsWith("GPU")) { - GPUModel = pair.split(";", 2)[1]; - } else if (pair.startsWith("Memory:")) { - GPUMemorySize = pair.split(":", 2)[1]; - } - } - ServicePublishVO servicePublishVO = new ServicePublishVO(); - servicePublishVO.setIp(servicePublishDTO.getIp()); - servicePublishVO.setModelId(servicePublishDTO.getModelId()); - servicePublishVO.setGPUMemorySize(GPUMemorySize); - servicePublishVO.setGPUModel(GPUModel); - //todo 调用模型部署,传递信息 - - servicePublishVO.setApiUrl(servicePublishDTO.getApiUrl()); - list.add(servicePublishVO); - redisTemplate.opsForValue().set(key,list); - //一个ip上有多个机器 - // 假设从 Redis 获取的列表元素是 MachineInfo 类型 - String ip = servicePublishVO.getIp(); - String key1 = ip; - List machineList = (List) redisTemplate.opsForValue().get(key1); - // 模型所需的 GPU 资源 - String requiredGPUModel = servicePublishVO.getGPUModel(); - Integer requiredGPUMemory = Integer.valueOf(servicePublishVO.getGPUMemorySize()); - if (machineList != null) { - for (MachineInfo machine : machineList) { - // 获取机器的 GPU 资源 - String machineGPUModel = machine.getGPUModel(); - Integer machineGPUMemory = machine.getGPUMemorySize(); - - // 判断机器是否满足模型需求 - if (requiredGPUModel.equals(machineGPUModel) && - machineGPUMemory >= requiredGPUMemory) { - return OptResult.success(list); - } - } - String key3 = "wait_queue"; - redisTemplate.opsForValue().set(key3,list); - //todo资源释放时候优先分配等待队列中任务 + try { + nacosServiceUtil.registerService( + servicePublishDTO.getModelId().toString(), + servicePublishDTO.getIp(), + 8080 + ); + log.info("Nacos服务注册成功"); + } catch (Exception e) { + log.error("Nacos服务注册失败", e); } - return OptResult.success(list); + return OptResult.success(); } diff --git a/src/main/java/com/bipt/intelligentapplicationorchestrationservice/util/NacosServiceUtil.java b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/util/NacosServiceUtil.java new file mode 100644 index 0000000..53861a1 --- /dev/null +++ b/src/main/java/com/bipt/intelligentapplicationorchestrationservice/util/NacosServiceUtil.java @@ -0,0 +1,21 @@ +package com.bipt.intelligentapplicationorchestrationservice.util; + +import com.alibaba.nacos.api.naming.NamingFactory; +import com.alibaba.nacos.api.naming.NamingService; +import com.alibaba.nacos.api.naming.pojo.Instance; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +@Component +public class NacosServiceUtil { + @Value("${spring.cloud.nacos.discovery.server-addr}") + private String nacosServerAddr; + + public void registerService(String serviceName, String ip, int port) throws Exception { + NamingService naming = NamingFactory.createNamingService(nacosServerAddr); + Instance instance = new Instance(); + instance.setIp(ip); + instance.setPort(port); + naming.registerInstance(serviceName, instance); + } +} \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 2b97d0a..d8ff972 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,5 +1,3 @@ -spring.application.name=intelligent-application-orchestration-service - # 数据库配置 spring.datasource.url=jdbc:kingbase8://116.205.121.200:54321/Ipz @@ -10,20 +8,14 @@ spring.datasource.hikari.maximum-pool-size=10 spring.datasource.hikari.minimum-idle=5 spring.datasource.hikari.connection-timeout=30000 -# SQL映射文件路径配置 +# MyBatis配置 mybatis.mapper-locations=classpath:mapper/*.xml -# 配置实体类别名所在包 mybatis.type-aliases-package=com.bipt.intelligentapplicationorchestrationservice.pojo -# 开启驼峰命名转换 mybatis.configuration.map-underscore-to-camel-case=true -# Redis服务器地址 +# Redis配置 spring.data.redis.host=116.205.121.200 -# Redis服务器端口 spring.data.redis.port=6379 -# Redis密码(如果有) spring.data.redis.password=Jbjhhzstsl97@ -# Redis数据库索引(默认为0) -spring.data.redis.database = 0 -# 连接超时时间(毫秒) -spring.data.redis.timeout = 3000 +spring.data.redis.database=0 +spring.data.redis.timeout=3000 \ No newline at end of file diff --git a/src/main/resources/bootstrap.properties b/src/main/resources/bootstrap.properties new file mode 100644 index 0000000..b24d590 --- /dev/null +++ b/src/main/resources/bootstrap.properties @@ -0,0 +1,10 @@ +# 应用名称(必须与Nacos配置的dataId前缀一致) +spring.application.name=intelligent-application-orchestration-service + +# Nacos配置中心地址(引导阶段加载配置) +spring.cloud.nacos.config.server-addr=192.168.100.1:8848 +spring.cloud.nacos.config.data-id=${spring.application.name}.properties +spring.cloud.nacos.config.group=DEFAULT_GROUP + +# Nacos服务注册地址(引导阶段注册服务) +spring.cloud.nacos.discovery.server-addr=192.168.100.1:8848 \ No newline at end of file