mirror of
https://github.com/didi/KnowStreaming.git
synced 2025-12-24 11:52:08 +08:00
加快添加集群后的信息获取的速度
This commit is contained in:
@@ -0,0 +1,15 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.event.cluster;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集群新增事件
|
||||||
|
* @author zengqiao
|
||||||
|
* @date 22/02/25
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
public class ClusterPhyAddedEvent extends ClusterPhyBaseEvent {
|
||||||
|
public ClusterPhyAddedEvent(Object source, Long clusterPhyId) {
|
||||||
|
super(source, clusterPhyId);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,7 +7,9 @@ import com.didiglobal.logi.security.common.dto.oplog.OplogDTO;
|
|||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.result.ResultStatus;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.event.cluster.ClusterPhyAddedEvent;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.po.cluster.ClusterPhyPO;
|
import com.xiaojukeji.know.streaming.km.common.bean.po.cluster.ClusterPhyPO;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.component.SpringTool;
|
||||||
import com.xiaojukeji.know.streaming.km.common.constant.MsgConstant;
|
import com.xiaojukeji.know.streaming.km.common.constant.MsgConstant;
|
||||||
import com.xiaojukeji.know.streaming.km.common.enums.operaterecord.ModuleEnum;
|
import com.xiaojukeji.know.streaming.km.common.enums.operaterecord.ModuleEnum;
|
||||||
import com.xiaojukeji.know.streaming.km.common.enums.operaterecord.OperationEnum;
|
import com.xiaojukeji.know.streaming.km.common.enums.operaterecord.OperationEnum;
|
||||||
@@ -106,6 +108,8 @@ public class ClusterPhyServiceImpl implements ClusterPhyService {
|
|||||||
|
|
||||||
log.info("method=addClusterPhy||clusterPhyId={}||operator={}||msg=add cluster finished", clusterPhyPO.getId(), operator);
|
log.info("method=addClusterPhy||clusterPhyId={}||operator={}||msg=add cluster finished", clusterPhyPO.getId(), operator);
|
||||||
|
|
||||||
|
// 发布添加集群事件
|
||||||
|
SpringTool.publish(new ClusterPhyAddedEvent(this, clusterPhyPO.getId()));
|
||||||
return clusterPhyPO.getId();
|
return clusterPhyPO.getId();
|
||||||
} catch (DuplicateKeyException dke) {
|
} catch (DuplicateKeyException dke) {
|
||||||
log.warn("method=addClusterPhy||clusterPhyId={}||operator={}||msg=add cluster failed||errMsg=duplicate data", clusterPhyPO.getId(), operator);
|
log.warn("method=addClusterPhy||clusterPhyId={}||operator={}||msg=add cluster failed||errMsg=duplicate data", clusterPhyPO.getId(), operator);
|
||||||
|
|||||||
@@ -0,0 +1,76 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.task.service.listener;
|
||||||
|
|
||||||
|
import com.didiglobal.logi.log.ILog;
|
||||||
|
import com.didiglobal.logi.log.LogFactory;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.event.cluster.ClusterPhyAddedEvent;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.component.SpringTool;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.utils.BackoffUtils;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.utils.FutureUtil;
|
||||||
|
import com.xiaojukeji.know.streaming.km.persistence.cache.LoadedClusterPhyCache;
|
||||||
|
import com.xiaojukeji.know.streaming.km.task.metadata.AbstractAsyncMetadataDispatchTask;
|
||||||
|
import com.xiaojukeji.know.streaming.km.task.metrics.AbstractAsyncMetricsDispatchTask;
|
||||||
|
import org.springframework.context.ApplicationListener;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class TaskClusterAddedListener implements ApplicationListener<ClusterPhyAddedEvent> {
|
||||||
|
private static final ILog LOGGER = LogFactory.getLog(TaskClusterAddedListener.class);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onApplicationEvent(ClusterPhyAddedEvent event) {
|
||||||
|
LOGGER.info("class=TaskClusterAddedListener||method=onApplicationEvent||clusterPhyId={}||msg=listened new cluster", event.getClusterPhyId());
|
||||||
|
Long now = System.currentTimeMillis();
|
||||||
|
|
||||||
|
// 交由KS自定义的线程池,异步执行任务
|
||||||
|
FutureUtil.quickStartupFutureUtil.submitTask(() -> triggerAllTask(event.getClusterPhyId(), now));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void triggerAllTask(Long clusterPhyId, Long startTimeUnitMs) {
|
||||||
|
ClusterPhy tempClusterPhy = null;
|
||||||
|
|
||||||
|
// 120秒内无加载进来,则直接返回退出
|
||||||
|
while (System.currentTimeMillis() - startTimeUnitMs <= 120L * 1000L) {
|
||||||
|
tempClusterPhy = LoadedClusterPhyCache.getByPhyId(clusterPhyId);
|
||||||
|
if (tempClusterPhy != null) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
BackoffUtils.backoff(1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tempClusterPhy == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取到之后,再延迟5秒,保证相关的集群都被正常加载进来,这里的5秒不固定
|
||||||
|
BackoffUtils.backoff(5000);
|
||||||
|
final ClusterPhy clusterPhy = tempClusterPhy;
|
||||||
|
|
||||||
|
// 集群执行集群元信息同步
|
||||||
|
List<AbstractAsyncMetadataDispatchTask> metadataServiceList = new ArrayList<>(SpringTool.getBeansOfType(AbstractAsyncMetadataDispatchTask.class).values());
|
||||||
|
for (AbstractAsyncMetadataDispatchTask dispatchTask: metadataServiceList) {
|
||||||
|
try {
|
||||||
|
dispatchTask.asyncProcessSubTask(clusterPhy, startTimeUnitMs);
|
||||||
|
} catch (Exception e) {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 再延迟5秒,保证集群元信息都已被正常同步至DB,这里的5秒不固定
|
||||||
|
BackoffUtils.backoff(5000);
|
||||||
|
|
||||||
|
// 集群集群指标采集
|
||||||
|
List<AbstractAsyncMetricsDispatchTask> metricsServiceList = new ArrayList<>(SpringTool.getBeansOfType(AbstractAsyncMetricsDispatchTask.class).values());
|
||||||
|
for (AbstractAsyncMetricsDispatchTask dispatchTask: metricsServiceList) {
|
||||||
|
try {
|
||||||
|
dispatchTask.asyncProcessSubTask(clusterPhy, startTimeUnitMs);
|
||||||
|
} catch (Exception e) {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user