|
|
@@ -0,0 +1,137 @@
|
|
|
+package com.giantan.data.mds.service.impl;
|
|
|
+
|
|
|
+import com.giantan.data.index.IHybridSearch;
|
|
|
+import com.giantan.data.mds.bot.GChatClient;
|
|
|
+import com.giantan.data.mds.repository.MdDynamicTaskRepository;
|
|
|
+import com.giantan.data.mds.service.IMdChunksService;
|
|
|
+import com.giantan.data.mds.service.IMdFilesService;
|
|
|
+import com.giantan.data.mds.service.IVectorization;
|
|
|
+import com.giantan.data.mds.task.MdPersistentTaskService;
|
|
|
+import com.giantan.data.mds.task.impl.ChunksTaskHandler;
|
|
|
+import com.giantan.data.mds.task.impl.MdsTaskHandler;
|
|
|
+import com.giantan.data.tasks.ITaskHandler;
|
|
|
+import com.giantan.data.tasks.TaskEventListener;
|
|
|
+import com.giantan.data.tasks.TaskHandlerRegistry;
|
|
|
+import com.giantan.data.tasks.TaskManager;
|
|
|
+import com.google.common.eventbus.AsyncEventBus;
|
|
|
+import jakarta.annotation.PostConstruct;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.concurrent.Executor;
|
|
|
+
|
|
|
+//task:
|
|
|
+// executor:
|
|
|
+// corePoolSize: 2
|
|
|
+// maxPoolSize: 20
|
|
|
+// queueCapacity: 40
|
|
|
+// keepAliveSeconds: 60
|
|
|
+
|
|
|
+@Service
|
|
|
+public class MdTaskManager extends TaskManager {
|
|
|
+ @Value("${task.executor.corePoolSize}")
|
|
|
+ int corePoolSize = 5;
|
|
|
+ @Value("${task.executor.maxPoolSize}")
|
|
|
+ int maximumPoolSize = 20;
|
|
|
+ @Value("${task.executor.keepAliveSeconds}")
|
|
|
+ int keepAliveSeconds = 60;
|
|
|
+ @Value("${task.executor.queueCapacity}")
|
|
|
+ int queueCapacity = 40;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ IMdFilesService mdFilesService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ IMdChunksService mdChunksService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ GChatClient gChatClient;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ IVectorization vectorizationService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ IHybridSearch hybridSearch;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ MdCollectionsService mdCollectionsService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ MdDynamicTaskRepository mdDynamicTaskRepository;
|
|
|
+
|
|
|
+//
|
|
|
+// @Bean
|
|
|
+// public EventBus eventBus(Executor taskExecutor) {
|
|
|
+// return new AsyncEventBus(taskExecutor);
|
|
|
+// }
|
|
|
+//
|
|
|
+// @Bean
|
|
|
+// public TaskManager taskManager(EventBus eventBus) {
|
|
|
+// TaskManager taskManager = new TaskManager(eventBus);
|
|
|
+// taskManager.setPersistentTaskService(persistentTaskService);
|
|
|
+// return taskManager;
|
|
|
+// }
|
|
|
+//
|
|
|
+// @Bean
|
|
|
+// public TaskHandlerRegistry taskHandlerRegistry(List<ITaskHandler> handlers) {
|
|
|
+// return new TaskHandlerRegistry(handlers);
|
|
|
+// }
|
|
|
+//
|
|
|
+// @Bean
|
|
|
+// public TaskEventListener taskEventListener(TaskHandlerRegistry registry, TaskManager manager, EventBus eventBus) {
|
|
|
+// TaskEventListener listener = new TaskEventListener(registry, manager);
|
|
|
+// eventBus.register(listener); // 注册监听器
|
|
|
+// return listener;
|
|
|
+// }
|
|
|
+
|
|
|
+ public MdTaskManager() {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @PostConstruct
|
|
|
+ public void init() {
|
|
|
+ Executor executor = taskExecutor();
|
|
|
+ AsyncEventBus eventBus = new AsyncEventBus(executor);
|
|
|
+ setEventBus(eventBus);
|
|
|
+
|
|
|
+ MdPersistentTaskService persistentTaskService = new MdPersistentTaskService(mdCollectionsService,mdDynamicTaskRepository);
|
|
|
+ setPersistentTaskService(persistentTaskService);
|
|
|
+
|
|
|
+ TaskHandlerRegistry taskHandlerRegistry = getTaskHandlerRegistry();
|
|
|
+ //eventBus.register(taskHandlerRegistry);
|
|
|
+
|
|
|
+ TaskEventListener listener = getTaskEventListener(taskHandlerRegistry, this);
|
|
|
+ eventBus.register(listener); // 注册监听器
|
|
|
+ }
|
|
|
+
|
|
|
+ public Executor taskExecutor() {
|
|
|
+ //return Executors.newFixedThreadPool(10);
|
|
|
+ ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
|
|
|
+ taskExecutor.setCorePoolSize(corePoolSize);
|
|
|
+ taskExecutor.setMaxPoolSize(maximumPoolSize);
|
|
|
+ taskExecutor.setQueueCapacity(queueCapacity);
|
|
|
+ taskExecutor.setKeepAliveSeconds(keepAliveSeconds);
|
|
|
+ taskExecutor.initialize();
|
|
|
+ return taskExecutor;
|
|
|
+ }
|
|
|
+
|
|
|
+ public TaskEventListener getTaskEventListener(TaskHandlerRegistry registry, TaskManager manager) {
|
|
|
+ TaskEventListener listener = new TaskEventListener(registry, manager);
|
|
|
+ return listener;
|
|
|
+ }
|
|
|
+
|
|
|
+ protected TaskHandlerRegistry getTaskHandlerRegistry(){
|
|
|
+ List<ITaskHandler> handlers = new ArrayList<>();
|
|
|
+ MdsTaskHandler mdsTaskHandler = new MdsTaskHandler(mdFilesService, mdChunksService);
|
|
|
+ handlers.add(mdsTaskHandler);
|
|
|
+ ChunksTaskHandler chunksTaskHandler = new ChunksTaskHandler(mdChunksService, vectorizationService, hybridSearch, gChatClient);
|
|
|
+ handlers.add(chunksTaskHandler);
|
|
|
+ TaskHandlerRegistry registry = new TaskHandlerRegistry(handlers);
|
|
|
+ return registry;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|