You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.1 KiB
87 lines
2.1 KiB
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() |
|
}
|
|
|