首先声明,这是一篇求助帖。。。
逻辑是这样写的,我把需要缓存下来的值缓存完之后,放入队列里,在过期前,发送给消费者,消费者里去处理这个过期的 key,更新完 key 的值之后 再放入队列,等快过期是再发送,依次循环来更新过期 key 的值。但是这么做有很大的问题,会不间断的生产,不间断的消费,比如我设置的延时发送消息 3 秒一次,也不会生效,由于刚上手 mq 所以 不是太懂,求指导。
1
hhyvs111 2019-09-09 09:48:14 +08:00
这个代码背景看的眼睛疼
|
2
runnerlee 2019-09-09 09:53:35 +08:00
手机号码暴露
|
3
LeeSeoung 2019-09-09 09:55:08 +08:00
了解下 死信 这个概念吧,rabbitmq 你用错了。
|
4
LeeSeoung 2019-09-09 09:56:37 +08:00
rabbitmq 实现延迟队列 搜下这个
|
5
DanielGuo 2019-09-09 10:00:03 +08:00
我也不太懂 mq,但是根据你的描述,为什么不直接开一个定时任务直接更新,而是发到 mq 里呢?
|
6
jakehu 2019-09-09 10:04:08 +08:00
如果只是延时队列的话我推荐你 https://github.com/beanstalkd/beanstalkd
|
7
hosaos 2019-09-09 10:07:33 +08:00
消息堆积怎么办?没及时消费消息 还是可能导致 redis 缓存过期
|
8
TangMonk 2019-09-09 10:07:49 +08:00
以前做过 rabbitmq 的延时消息
https://www.cloudamqp.com/docs/delayed-messages.html |
9
lllllliu 2019-09-09 10:16:32 +08:00
redis 过期之后在生成?
如果这样的话直接订阅 Redis 的 KeySpaceEvent 触发生成呗。 |
10
tinybaby365 2019-09-09 10:17:20 +08:00
rabbitmq 安装一个延迟队列的插件。可以用这个 docker 镜像:jiangfengbing/rabbitmq-x:latest
https://github.com/jiangfengbing/rabbitmq-x/blob/master/Dockerfile |
14
LeeSeoung 2019-09-09 11:15:38 +08:00
@571726193 不好意思没仔细看,x-delay 这个需要配合插件 rabbitmq-delayed-message-exchange 使用,没有生效的 话看下是不是安装插件并且启用了。
|
15
571726193 OP 谢谢 各位的答复,目前已经解决,换了一种写法而已,功能已实现。只是还是 不太清楚原因而已。================================================================================================================================================
|
18
changdy 2019-09-10 07:39:27 +08:00
|
21
xiaoyaojc 2019-09-12 10:52:13 +08:00
redis 的 key 过期是惰性的,不是实时的,换句话说,延迟的时间是不确定的
|