首先声明,这是一篇求助帖。。。
逻辑是这样写的,我把需要缓存下来的值缓存完之后,放入队列里,在过期前,发送给消费者,消费者里去处理这个过期的 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 过期是惰性的,不是实时的,换句话说,延迟的时间是不确定的 |