Rabbit MQ 延时消息实现 redis 过期 key 自动刷新!

2019-09-09 09:31:45 +08:00
 571726193

首先声明,这是一篇求助帖。。。

逻辑是这样写的,我把需要缓存下来的值缓存完之后,放入队列里,在过期前,发送给消费者,消费者里去处理这个过期的 key,更新完 key 的值之后 再放入队列,等快过期是再发送,依次循环来更新过期 key 的值。但是这么做有很大的问题,会不间断的生产,不间断的消费,比如我设置的延时发送消息 3 秒一次,也不会生效,由于刚上手 mq 所以 不是太懂,求指导。

5088 次点击
所在节点    Java
21 条回复
hhyvs111
2019-09-09 09:48:14 +08:00
这个代码背景看的眼睛疼
runnerlee
2019-09-09 09:53:35 +08:00
手机号码暴露
LeeSeoung
2019-09-09 09:55:08 +08:00
了解下 死信 这个概念吧,rabbitmq 你用错了。
LeeSeoung
2019-09-09 09:56:37 +08:00
rabbitmq 实现延迟队列 搜下这个
DanielGuo
2019-09-09 10:00:03 +08:00
我也不太懂 mq,但是根据你的描述,为什么不直接开一个定时任务直接更新,而是发到 mq 里呢?
jakehu
2019-09-09 10:04:08 +08:00
如果只是延时队列的话我推荐你 https://github.com/beanstalkd/beanstalkd
hosaos
2019-09-09 10:07:33 +08:00
消息堆积怎么办?没及时消费消息 还是可能导致 redis 缓存过期
TangMonk
2019-09-09 10:07:49 +08:00
以前做过 rabbitmq 的延时消息
https://www.cloudamqp.com/docs/delayed-messages.html
lllllliu
2019-09-09 10:16:32 +08:00
redis 过期之后在生成?
如果这样的话直接订阅 Redis 的 KeySpaceEvent 触发生成呗。
tinybaby365
2019-09-09 10:17:20 +08:00
rabbitmq 安装一个延迟队列的插件。可以用这个 docker 镜像:jiangfengbing/rabbitmq-x:latest

https://github.com/jiangfengbing/rabbitmq-x/blob/master/Dockerfile
571726193
2019-09-09 10:21:00 +08:00
@LeeSeoung 请告知一下哪里用错了
571726193
2019-09-09 10:21:17 +08:00
@DanielGuo 定时任务消耗比较大
571726193
2019-09-09 10:22:16 +08:00
@hosaos 消息堆积 和没及时消费信息 如何产生的啊 老哥
LeeSeoung
2019-09-09 11:15:38 +08:00
@571726193 不好意思没仔细看,x-delay 这个需要配合插件 rabbitmq-delayed-message-exchange 使用,没有生效的 话看下是不是安装插件并且启用了。
571726193
2019-09-09 13:45:10 +08:00
谢谢 各位的答复,目前已经解决,换了一种写法而已,功能已实现。只是还是 不太清楚原因而已。================================================================================================================================================
blackccc
2019-09-09 14:05:31 +08:00
@571726193 什么写法
qinxi
2019-09-09 15:14:53 +08:00
@lllllliu #9 同感为啥不用 redis 自己的
changdy
2019-09-10 07:39:27 +08:00
@lllllliu
@qinxi
2333 这就要从 redis 的策略说起了...那么思考题来了.你们觉得 redis 是怎么实现过期 删 key 的? 不展开了. 两位可以自己搜索.这个地方其实是个坑.
571726193
2019-09-11 16:30:49 +08:00
@qinxi redis 自带的比较消耗 cpu 量多的情况下 可想而知
571726193
2019-09-11 16:31:09 +08:00
@blackccc 还是 用延时队列

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

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

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

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

© 2021 V2EX