Rabbit MQ 延时消息实现 redis 过期 key 自动刷新! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
571726193
V2EX    Java

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

  •  
  •   571726193 2019-09-09 09:31:45 +08:00 5775 次点击
    这是一个创建于 2224 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    21 条回复    2019-09-12 10:52:13 +08:00
    hhyvs111
        1
    hhyvs111  
       2019-09-09 09:48:14 +08:00
    这个代码背景看的眼睛疼
    runnerlee
        2
    runnerlee  
       2019-09-09 09:53:35 +08:00
    手机号码暴露
    LeeSeoung
        3
    LeeSeoung  
       2019-09-09 09:55:08 +08:00
    了解下 死信 这个概念吧,rabbitmq 你用错了。
    LeeSeoung
        4
    LeeSeoung  
       2019-09-09 09:56:37 +08:00
    rabbitmq 实现延迟队列 搜下这个
    DanielGuo
        5
    DanielGuo  
       2019-09-09 10:00:03 +08:00
    我也不太懂 mq,但是根据你的描述,为什么不直接开一个定时任务直接更新,而是发到 mq 里呢?
    jakehu
        6
    jakehu  
       2019-09-09 10:04:08 +08:00
    如果只是延时队列的话我推荐你 https://github.com/beanstalkd/beanstalkd
    hosaos
        7
    hosaos  
       2019-09-09 10:07:33 +08:00
    消息堆积怎么办?没及时消费消息 还是可能导致 redis 缓存过期
    TangMonk
        8
    TangMonk  
       2019-09-09 10:07:49 +08:00
    以前做过 rabbitmq 的延时消息
    https://www.cloudamqp.com/docs/delayed-messages.html
    lllllliu
        9
    lllllliu  
       2019-09-09 10:16:32 +08:00
    redis 过期之后在生成?
    如果这样的话直接订阅 Redis 的 KeySpaceEvent 触发生成呗。
    tinybaby365
        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
    571726193
        11
    571726193  
    OP
       2019-09-09 10:21:00 +08:00
    @LeeSeoung 请告知一下哪里用错了
    571726193
        12
    571726193  
    OP
       2019-09-09 10:21:17 +08:00
    @DanielGuo 定时任务消耗比较大
    571726193
        13
    571726193  
    OP
       2019-09-09 10:22:16 +08:00
    @hosaos 消息堆积 和没及时消费信息 如何产生的啊 老哥
    LeeSeoung
        14
    LeeSeoung  
       2019-09-09 11:15:38 +08:00
    @571726193 不好意思没仔细看,x-delay 这个需要配合插件 rabbitmq-delayed-message-exchange 使用,没有生效的 话看下是不是安装插件并且启用了。
    571726193
        15
    571726193  
    OP
       2019-09-09 13:45:10 +08:00
    谢谢 各位的答复,目前已经解决,换了一种写法而已,功能已实现。只是还是 不太清楚原因而已。================================================================================================================================================
    blackccc
        16
    blackccc  
       2019-09-09 14:05:31 +08:00
    @571726193 什么写法
    qinxi
        17
    qinxi  
       2019-09-09 15:14:53 +08:00
    @lllllliu #9 同感为啥不用 redis 自己的
    changdy
        18
    changdy  
       2019-09-10 07:39:27 +08:00
    @lllllliu
    @qinxi
    2333 这就要从 redis 的策略说起了...那么思考题来了.你们觉得 redis 是怎么实现过期 删 key 的? 不展开了. 两位可以自己搜索.这个地方其实是个坑.
    571726193
        19
    571726193  
    OP
       2019-09-11 16:30:49 +08:00
    @qinxi redis 自带的比较消耗 cpu 量多的情况下 可想而知
    571726193
        20
    571726193  
    OP
       2019-09-11 16:31:09 +08:00
    @blackccc 还是 用延时队列
    xiaoyaojc
        21
    xiaoyaojc  
       2019-09-12 10:52:13 +08:00
    redis 的 key 过期是惰性的,不是实时的,换句话说,延迟的时间是不确定的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     6158 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 03:14 PVG 11:14 LAX 20:14 JFK 23:14
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86