-
Notifications
You must be signed in to change notification settings - Fork 1
uniqueMsg
Tony edited this page Feb 6, 2023
·
2 revisions
gmq 内部通过判断消息标识(message ID)方式去重, 默认消息入队时,如果不指定标识(ID),自动以 UUIDV4 算法生成一个。
如果想灵活自定义控制消息去重,可自定义标识。以网页爬虫队列场景为例,我们想以 目标网页完整地址(Full URI)作为标识,期望 24 小时内只更新一次
cli, _ := gmq.NewClient(dsn)
cli.Enqueue(ctx, &gmq.Msg{Id: "https://datatracker.ietf.org/doc/html/rfc2616"}, gmq.OptUniqueIn(time.Hour*24))
如果不指定 gmq.OptUniqueIn
,则消息满足在调用 Fail、Complete,或 (消息创建Unix时间戳+gmq.TTLMsg) > 当前Unix时间戳 其中一个条件后,去重约束失效。
注意,gmq 与 hibiken/asynq 不一样的是,asynq 如果消费消息成功后24小时内唯一约束会自动删除,gmq 不会。
无论消费成功还是失败,24小时内唯一限制都会存在。在时限内,如果相同 msgId 消息入队,会返回 ErrMsgIdConflict
错误。