Commit 34116196 authored by hujiebin's avatar hujiebin

feat:一个事件一个事务减少锁粒度

parent e8deba7d
...@@ -30,12 +30,13 @@ func (s *GiftSendEventService) Consume() error { ...@@ -30,12 +30,13 @@ func (s *GiftSendEventService) Consume() error {
} }
}() }()
var model = domain.CreateModel(s.svc.CtxAndDb) var model = domain.CreateModel(s.svc.CtxAndDb)
return model.Transaction(func(model *domain.Model) error { events, offset, err := event_m.FetchEventGiftSend(model, BatchCount)
events, offset, err := event_m.FetchEventGiftSend(model, BatchCount) if err != nil {
if err != nil { return err
return err }
} for k := range events {
for k := range events { // 一个事件一个事务
err = model.Transaction(func(model *domain.Model) error {
cpEvent := &event_m.EventGiftSend{ cpEvent := &event_m.EventGiftSend{
Entity: mysql.Entity{ Entity: mysql.Entity{
ID: events[k].ID, ID: events[k].ID,
...@@ -48,12 +49,12 @@ func (s *GiftSendEventService) Consume() error { ...@@ -48,12 +49,12 @@ func (s *GiftSendEventService) Consume() error {
} }
if cpEvent.MarkHiloGroup == mysql.YES { if cpEvent.MarkHiloGroup == mysql.YES {
model.Log.Warnf("already consume msg :%v", cpEvent) model.Log.Warnf("already consume msg :%v", cpEvent)
continue return nil
} }
sendGiftEvent := new(gift_ev.SendGiftEvent) sendGiftEvent := new(gift_ev.SendGiftEvent)
if err := json.Unmarshal(cpEvent.Payload, sendGiftEvent); err != nil { if err := json.Unmarshal(cpEvent.Payload, sendGiftEvent); err != nil {
model.Log.Errorf("json msg fail,event:%v,err:%v", cpEvent, err) model.Log.Errorf("json msg fail,event:%v,err:%v", cpEvent, err)
continue return nil
} }
if err := gift_ev.PublishSendGiftEvent(model, sendGiftEvent); err != nil { if err := gift_ev.PublishSendGiftEvent(model, sendGiftEvent); err != nil {
model.Log.Errorf("PublishSendGiftEvent fail,event:%v,err:%v", cpEvent, err) model.Log.Errorf("PublishSendGiftEvent fail,event:%v,err:%v", cpEvent, err)
...@@ -66,16 +67,13 @@ func (s *GiftSendEventService) Consume() error { ...@@ -66,16 +67,13 @@ func (s *GiftSendEventService) Consume() error {
model.Log.Errorf("consume msg fail,event:%v,err:%v", cpEvent, err) model.Log.Errorf("consume msg fail,event:%v,err:%v", cpEvent, err)
return err return err
} }
} return nil
if err != nil { })
model.Log.Errorf("batch consume msg has fail,event,err:%v", err) }
// 暂时先允许丢数据,继续mark offset // 最后一次提交offset
} if len(events) > 0 {
// 最后一次提交offset offset.MarkOffset = events[len(events)-1].ID
if len(events) > 0 { return offset.Persistence()
offset.MarkOffset = events[len(events)-1].ID }
return offset.Persistence() return nil
}
return nil
})
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment