支付宝那种支付回调 按一定频率推送是怎么实现的?(4m,10m,10m,1h,2h,6h,15h)

2020-05-26 14:24:02 +08:00
 wuzhizuiguo

我的想法是, 第一次的时候直接推送(请求对方的 url) 如果成功了,那就不做其他操作. 失败了: 把推送的订单 写入 redis 的 hash 表(具体对象 )和 zset 中(主键),设置 score 值为要推送的时间,然后再加一个记录这是第几次推送的 key-value

跑一个定时器 每秒去读 zset 中 score 符合推送的订单 id(再去 hash 中获取具体数据),并删除这两个值, 然后再次请求对方的 url,返回正常状态,那么就成功了. 失败: 根据是第几次推送, 把 score 值加大,hash 表再添加对应的订单数据. 继续推送, 直到次数太多,不再推送..

请问下坛友, 这种回调按一定频率推送 一般是怎么做的?

4831 次点击
所在节点    Java
23 条回复
klgd
2020-05-28 10:17:04 +08:00
@wuzhizuiguo #20 消息在入队时可以加个次数的参数,在消费消息时,处理成功了,就结束;失败了,根据次数得出下一次的延时时间,然后重新操作入队
wuzhizuiguo
2020-05-28 10:30:01 +08:00
@klgd 好的.(我想是加个 redis 消息主键 - 次数 这样的缓存是吧)
wuzhizuiguo
2020-06-02 17:16:25 +08:00
结论: rabbitMq 可行,延时队列, 不装插件情况下. 设置多个队列,例如 A,B,C,D 首先第一次调用失败, 将消息设置过期时间 4 秒, 设置缓存次数, 进入 A 队列,(A 队列固定的就是 4 秒, 不是队列本身的过期时间, 而是进入该队列的消息都是 4 秒过期. 队列中也不会出现 后入消息过期时间 比前入的早). 经过绑定的交换器 exchange 进入 实际的消费队列 X, 消费如果再失败 ,根据 redis 缓存的次数值, 在这里决定将此次消息放入到哪个队列, 假设是 B, 那么设置过期时间为 10 秒 ..... 流程就是这样, 这是我想到能实现的情况.
rabbitMQ 方面的例子 可以根据这个博客来 https://juejin.im/post/5a12ffd451882578da0d7b3a
谢谢.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/675598

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX