123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package offer
- import (
- "context"
- "encoding/json"
- "time"
- "go-common/app/job/main/app-wall/model/offer"
- "go-common/library/log"
- )
- const (
- _upActiveRetry = 5
- _sleep = 100 * time.Millisecond
- )
- func (s *Service) retryproc() {
- defer s.waiter.Done()
- var (
- bs []byte
- err error
- )
- c := context.TODO()
- msg := &offer.Retry{}
- for {
- if s.closed {
- break
- }
- if bs, err = s.dao.PopFail(c); err != nil {
- time.Sleep(5 * time.Second)
- continue
- }
- if len(bs) == 0 {
- time.Sleep(5 * time.Second)
- continue
- }
- if err = json.Unmarshal(bs, msg); err != nil {
- log.Error("json.Unmarshal(%s) error(%v)", bs, err)
- continue
- }
- log.Info("retry action(%s) data(%s)", msg.Action, bs)
- switch msg.Action {
- case offer.ActionActive:
- if msg.Data != nil {
- if err = retry(func() (err error) {
- return s.dao.Active(c, msg.Data.OS, msg.Data.IMEI, msg.Data.Androidid, msg.Data.Mac, "")
- }, _upActiveRetry, _sleep); err != nil {
- log.Error("%+v", err)
- if err = s.syncRetry(c, offer.ActionActive, msg.Data.OS, msg.Data.IMEI, msg.Data.Androidid, msg.Data.Mac); err != nil {
- log.Error("%+v", err)
- }
- return
- }
- }
- }
- }
- }
- func retry(callback func() error, retry int, sleep time.Duration) (err error) {
- for i := 0; i < retry; i++ {
- if err = callback(); err == nil {
- return
- }
- time.Sleep(sleep)
- }
- return
- }
- func (s *Service) syncRetry(c context.Context, action, os, imei, androidid, mac string) (err error) {
- retry := &offer.Retry{Action: action, Data: &offer.Data{OS: os, IMEI: imei, Androidid: androidid, Mac: mac}}
- return s.dao.PushFail(c, retry)
- }
|