首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Java

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

  •  
  •   571726193 · 65 天前 · 2320 次点击
    这是一个创建于 65 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    接口 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

    21 回复  |  直到 2019-09-12 10:52:13 +08:00
        1
    hhyvs111   65 天前
    这个代码背景看的眼睛疼
        2
    runnerlee   65 天前
    手机号码暴露
        3
    LeeSeoung   65 天前
    了解下 死信 这个概念吧,rabbitmq 你用错了。
        4
    LeeSeoung   65 天前
    rabbitmq 实现延迟队列 搜下这个
        5
    DanielGuo   65 天前
    我也不太懂 mq,但是根据你的描述,为什么不直接开一个定时任务直接更新,而是发到 mq 里呢?
        6
    jakehu   65 天前
    如果只是延时队列的话我推荐你 https://github.com/beanstalkd/beanstalkd
        7
    hosaos   65 天前
    消息堆积怎么办?没及时消费消息 还是可能导致 redis 缓存过期
        8
    TangMonk   65 天前
    以前做过 rabbitmq 的延时消息
    https://www.cloudamqp.com/docs/delayed-messages.html
        9
    lllllliu   65 天前
    redis 过期之后在生成?
    如果这样的话直接订阅 Redis 的 KeySpaceEvent 触发生成呗。
        10
    tinybaby365   65 天前
    rabbitmq 安装一个延迟队列的插件。可以用这个 docker 镜像:jiangfengbing/rabbitmq-x:latest

    https://github.com/jiangfengbing/rabbitmq-x/blob/master/Dockerfile
        11
    571726193   65 天前
    @LeeSeoung 请告知一下哪里用错了
        12
    571726193   65 天前
    @DanielGuo 定时任务消耗比较大
        13
    571726193   65 天前
    @hosaos 消息堆积 和没及时消费信息 如何产生的啊 老哥
        14
    LeeSeoung   65 天前
    @571726193 不好意思没仔细看,x-delay 这个需要配合插件 rabbitmq-delayed-message-exchange 使用,没有生效的 话看下是不是安装插件并且启用了。
        15
    571726193   65 天前
    谢谢 各位的答复,目前已经解决,换了一种写法而已,功能已实现。只是还是 不太清楚原因而已。================================================================================================================================================
        16
    blackccc   65 天前
    @571726193 什么写法
        17
    qinxi   65 天前
    @lllllliu #9 同感为啥不用 redis 自己的
        18
    changdy   64 天前
    @lllllliu
    @qinxi
    2333 这就要从 redis 的策略说起了...那么思考题来了.你们觉得 redis 是怎么实现过期 删 key 的? 不展开了. 两位可以自己搜索.这个地方其实是个坑.
        19
    571726193   63 天前
    @qinxi redis 自带的比较消耗 cpu 量多的情况下 可想而知
        20
    571726193   63 天前
    @blackccc 还是 用延时队列
        21
    xiaoyaojc   62 天前
    redis 的 key 过期是惰性的,不是实时的,换句话说,延迟的时间是不确定的
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2711 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 27ms · UTC 12:43 · PVG 20:43 · LAX 04:43 · JFK 07:43
    ♥ Do have faith in what you're doing.