88 lines
2.1 KiB
Go
88 lines
2.1 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
"strconv"
|
|
|
|
"go-common/app/job/openplatform/open-sug/conf"
|
|
"go-common/app/job/openplatform/open-sug/model"
|
|
"go-common/library/log"
|
|
)
|
|
|
|
func (s *Service) pgcConsumePROC() {
|
|
var (
|
|
msgs = s.pgcSub.Messages()
|
|
err error
|
|
)
|
|
for {
|
|
msg, ok := <-msgs
|
|
if !ok {
|
|
log.Error("pgc databus Consumer exit")
|
|
return
|
|
}
|
|
s.pgcMsgCnt++
|
|
msg.Commit()
|
|
log.Info("message commit key:%s partition:%d offset:%d", msg.Key, msg.Partition, msg.Offset)
|
|
m := &model.Message{}
|
|
if err = json.Unmarshal(msg.Value, m); err != nil {
|
|
log.Error("json.Unmarshal(%s) error(%v)", msg.Value, err)
|
|
continue
|
|
}
|
|
func(m *model.Message) {
|
|
s.wg.Add(1)
|
|
//defer s.wg.Done()
|
|
go s.subproc()
|
|
|
|
if m.Table == "t_chn_season2" || m.Table == "t_jp_season2" {
|
|
s.seasonUpdate(m.Action, m.New, m.Old)
|
|
s.seasonMsgCnt++
|
|
}
|
|
}(m)
|
|
log.Info("pgcConsumeproc table:%s key:%s partition:%d offset:%d", m.Table, msg.Key, msg.Partition, msg.Offset)
|
|
}
|
|
}
|
|
|
|
func (s *Service) seasonUpdate(action string, n, o json.RawMessage) {
|
|
newSeason := new(model.Season)
|
|
if err := json.Unmarshal(n, newSeason); err != nil {
|
|
log.Error("json.Unmarshal(%s) error(%v)", n, err)
|
|
return
|
|
}
|
|
oldSeason := new(model.Season)
|
|
if err := json.Unmarshal(o, oldSeason); err != nil {
|
|
log.Error("json.Unmarshal(%s) (%s)error(%v)", string(o), o, err)
|
|
return
|
|
}
|
|
if action == "insert" || action == "update" {
|
|
if newSeason.FieldDiff(oldSeason) {
|
|
s.dao.Index(
|
|
context.TODO(),
|
|
s.envIndex(s.c.ElasticSearch.Season.Index),
|
|
s.c.ElasticSearch.Season.Type,
|
|
strconv.Itoa(newSeason.ID),
|
|
newSeason.EsFormat(),
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
func (s *Service) envIndex(index string) string {
|
|
return fmt.Sprintf("%s_%s", s.c.Env, index)
|
|
}
|
|
|
|
func (s *Service) existsOrCreate(c conf.EsIndex) {
|
|
if s.dao.IndexExists(context.TODO(), s.envIndex(c.Index)) {
|
|
log.Info("索引(%s)已存在", s.envIndex(c.Index))
|
|
return
|
|
}
|
|
if !s.dao.CreateIndex(context.TODO(), s.envIndex(c.Index), c.Mapping) {
|
|
panic("创建索引失败")
|
|
}
|
|
}
|
|
|
|
func (s *Service) subproc() {
|
|
defer s.wg.Done()
|
|
}
|