Skip to content

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 错误。

Clone this wiki locally