|
|
@@ -0,0 +1,90 @@ |
|
|
|
package consume |
|
|
|
|
|
|
|
import ( |
|
|
|
"applet/app/cfg" |
|
|
|
"applet/app/db" |
|
|
|
md2 "applet/app/md" |
|
|
|
svc2 "applet/app/svc" |
|
|
|
"applet/app/utils" |
|
|
|
"applet/app/utils/logx" |
|
|
|
"applet/consume/md" |
|
|
|
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" |
|
|
|
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/rule/one_circles" |
|
|
|
"encoding/json" |
|
|
|
"errors" |
|
|
|
"fmt" |
|
|
|
"github.com/streadway/amqp" |
|
|
|
"time" |
|
|
|
) |
|
|
|
|
|
|
|
func ZhiosOrderTrackCreateForPddConsume(queue md.MqQueue) { |
|
|
|
fmt.Println(">>>>>>>>>>>>ZhiosOrderTrackCreateForPddConsume>>>>>>>>>>>>") |
|
|
|
ch, err := rabbit.Cfg.Pool.GetChannel() |
|
|
|
if err != nil { |
|
|
|
logx.Error(err) |
|
|
|
return |
|
|
|
} |
|
|
|
defer ch.Release() |
|
|
|
//1、将自己绑定到交换机上 |
|
|
|
ch.Bind(queue.Name, queue.ExchangeName, queue.RoutKey) |
|
|
|
//2、取出数据进行消费 |
|
|
|
ch.Qos(1) |
|
|
|
delivery := ch.Consume(queue.Name, false) |
|
|
|
|
|
|
|
one_circles.Init(cfg.RedisAddr) |
|
|
|
|
|
|
|
var res amqp.Delivery |
|
|
|
var ok bool |
|
|
|
for { |
|
|
|
res, ok = <-delivery |
|
|
|
if ok == true { |
|
|
|
err = handleZhiosOrderTrackCreateForPddConsume(res.Body) |
|
|
|
fmt.Println("err ::: ", err) |
|
|
|
if err != nil { |
|
|
|
fmt.Println("ZhiosOrderTrackCreateForPddConsume_ERR:::::", err.Error()) |
|
|
|
_ = res.Reject(true) //TODO::拒绝 Ack |
|
|
|
//_ = res.Reject(false) |
|
|
|
var msg interface{} |
|
|
|
json.Unmarshal(res.Body, &msg) |
|
|
|
if err.Error() == "Connection timed out" { |
|
|
|
//TODO::重新推回队列末尾,避免造成队列堵塞 |
|
|
|
ch.Publish(queue.ExchangeName, msg, queue.RoutKey) |
|
|
|
} else { |
|
|
|
//TODO::推入新的队列中备份 |
|
|
|
utils.FilePutContents("ZhiosOrderTrackCreateForPddConsume_ERR", utils.SerializeStr(err.Error())) |
|
|
|
ch.Publish("zhios.order_track_create_exception.exchange", map[string]interface{}{ |
|
|
|
"msg": msg, |
|
|
|
"err": err.Error(), |
|
|
|
}, "pdd") |
|
|
|
} |
|
|
|
} else { |
|
|
|
err = res.Ack(true) |
|
|
|
} |
|
|
|
} else { |
|
|
|
panic(errors.New("error getting message")) |
|
|
|
} |
|
|
|
} |
|
|
|
fmt.Println("get msg done") |
|
|
|
} |
|
|
|
|
|
|
|
func handleZhiosOrderTrackCreateForPddConsume(msgData []byte) error { |
|
|
|
//1、解析mq中queue的数据结构体 |
|
|
|
var msg md2.ZhiosOrderTrackCreateRoutKeyForTb |
|
|
|
err := json.Unmarshal(msgData, &msg) |
|
|
|
if err != nil { |
|
|
|
return err |
|
|
|
} |
|
|
|
time.Sleep(time.Microsecond * 100) // 等待100毫秒 |
|
|
|
fmt.Println("order_track_create_for_Pdd_message:::::::::::>>>>>>>>>") |
|
|
|
fmt.Println(msg) |
|
|
|
if db.DBs[msg.DbName] == nil { |
|
|
|
return nil |
|
|
|
} |
|
|
|
engine := db.DBs[msg.DbName] |
|
|
|
err = svc2.OrderSaveCreateUpdate(engine, msg.Pvd, msg.OrderData, msg.Opts, msg.DbName) |
|
|
|
if err != nil { |
|
|
|
fmt.Println("order_track_create_for_Pdd_ERR:::::::::::>>>>>>>>>", err.Error()) |
|
|
|
return err |
|
|
|
} |
|
|
|
return nil |
|
|
|
} |