4 Star 18 Fork 3

cristiane/micro-mall-pay

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
push_notice.go 2.59 KB
一键复制 编辑 原始数据 按行查看 历史
package service
import (
"context"
"gitee.com/cristiane/micro-mall-pay/pkg/code"
"gitee.com/kelvins-io/common/json"
"gitee.com/kelvins-io/common/queue"
"gitee.com/kelvins-io/kelvins"
"github.com/RichardKnop/machinery/v1/tasks"
)
type PushNoticeService struct {
server *queue.MachineryQueue
tag PushMsgTag
}
func NewPushNoticeService(server *queue.MachineryQueue, tag PushMsgTag) *PushNoticeService {
if tag.RetryCount <= 0 {
tag.RetryCount = 3
}
if tag.RetryTimeout <= 0 {
tag.RetryTimeout = 10
}
return &PushNoticeService{
server: server,
tag: tag,
}
}
type PushMsgTag struct {
DeliveryTag string
DeliveryErrTag string
RetryCount int
RetryTimeout int
}
func (p *PushNoticeService) PushMessage(ctx context.Context, args interface{}) (string, int) {
taskSign, retCode := p.buildQueueData(ctx, args)
if retCode != code.Success {
return "", retCode
}
taskId, retCode := p.sendTaskToQueue(ctx, taskSign)
if retCode != code.Success {
return "", retCode
}
return taskId, code.Success
}
// 构建队列数据
func (p *PushNoticeService) buildQueueData(ctx context.Context, args interface{}) (*tasks.Signature, int) {
sign := p.buildTaskSignature(args)
errSign, err := tasks.NewSignature(
p.tag.DeliveryErrTag, []tasks.Arg{
{
Name: "data",
Type: "string",
Value: json.MarshalToStringNoError(args),
},
})
if err != nil {
kelvins.ErrLogger.Errorf(ctx, "build errSign err: %v, taskSign: %v", err, json.MarshalToStringNoError(sign))
return nil, code.ErrorServer
}
errCallback := make([]*tasks.Signature, 0)
errCallback = append(errCallback, errSign)
sign.OnError = errCallback
return sign, code.Success
}
// 构建任务签名
func (p *PushNoticeService) buildTaskSignature(args interface{}) *tasks.Signature {
taskSignature := &tasks.Signature{
Name: p.tag.DeliveryTag,
RetryCount: p.tag.RetryCount,
RetryTimeout: p.tag.RetryTimeout,
Args: []tasks.Arg{
{
Name: "data",
Type: "string",
Value: json.MarshalToStringNoError(args),
},
},
}
return taskSignature
}
// 将任务发送到队列
func (p *PushNoticeService) sendTaskToQueue(ctx context.Context, taskSign *tasks.Signature) (string, int) {
result, err := p.server.TaskServer.SendTaskWithContext(ctx, taskSign)
if err != nil {
kelvins.ErrLogger.Errorf(ctx, "pushMessage err:%v, data:%v", err, json.MarshalToStringNoError(taskSign))
return "", code.ErrorServer
}
return result.Signature.UUID, code.Success
}
func (p *PushNoticeService) GetTaskState(taskId string) (*tasks.TaskState, error) {
return p.server.TaskServer.GetBackend().GetState(taskId)
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/cristiane/micro-mall-pay.git
git@gitee.com:cristiane/micro-mall-pay.git
cristiane
micro-mall-pay
micro-mall-pay
5f6f923dbc21

搜索帮助

Cb406eda 1850385 E526c682 1850385