package Kafka2ESService import ( "dsDataex/MyTask/Kafka2ES/Kafka2ESDAO" "dsDataex/Utils/ConfigUtil" "dsDataex/Utils/KafkaUtil" "fmt" "github.com/go-co-op/gocron" "reflect" "time" ) var ChanTopic chan []string var LstTopic []string func ServiceStart(){ cronMan := gocron.NewScheduler(time.UTC) cronMan.Every(5).Seconds().StartImmediately().Do(DBWatch) cronMan.StartAsync() var procNo=int(ConfigUtil.KafkaProcNo) KafkaUtil.ChanTopicProc=make(map[string][]chan bool) KafkaUtil.StateTopicProc=make(map[string][]bool) ChanTopic=make(chan []string,100) for topics :=range ChanTopic{ for no :=0;no< len(topics);no++ { topic:=topics[no] if Contains(LstTopic, topic) == -1 { LstTopic = append(LstTopic, topic) cronMan.Every(60).Seconds().SetTag([]string{"kafka_" + topic}).StartImmediately().Do(KafkaProcess, topic, procNo) //cronMan.StartAsync() } } if len(LstTopic)> len(topics){ for no:=0;no< len(LstTopic);no++{ if Contains(topics,LstTopic[no])==-1{ //删除任务 cronMan.RemoveJobByTag("kafka_"+LstTopic[no]) //关闭子线程 for no2:=0;no2< len(KafkaUtil.ChanTopicProc[LstTopic[no]]);no2++{ KafkaUtil.ChanTopicProc[LstTopic[no]][no] <- true } delete(KafkaUtil.ChanTopicProc,LstTopic[no]) delete(KafkaUtil.StateTopicProc,LstTopic[no]) } } LstTopic=[]string{} LstTopic=append(LstTopic,topics...) } } } func DBWatch() { var _,topics = Kafka2ESDAO.GetTopics() ChanTopic <- topics } func KafkaProcess(topic string,procNo int) { _,f:=KafkaUtil.ChanTopicProc[topic] if f==false{ var lst []chan bool var lst2 []bool for no:=0;no