V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
dunhanson
V2EX  ›  问与答

rabbitmq 死信队列,消息过期不转发问题

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

    1 、通过 RabbitMQ 的 DLX 和 TTL 来实现延迟队列

    2 、消息,00:00:00 和 00:30:00 ,到点了都没有转发

    3 、奇怪的是我访问 web 界面,get message 后就自动会转发了

    14 条回复    2023-08-22 10:50:53 +08:00
    brader
        1
    brader  
       250 天前
    同个队列的所有消息,延迟时间都是一样的吗?
    dunhanson
        2
    dunhanson  
    OP
       250 天前
    @brader 不一样,一个 00:00:00 ,一个 00:30:00
    dunhanson
        3
    dunhanson  
    OP
       250 天前
    但我那些 9 点,12 点,15 点,18 点 消息 挺正常的
    linauror
        4
    linauror  
       250 天前
    死信队列有个限制是,队列里的延迟时间要一致,否则前面的消息没到过期时间,那么后面的其他消息也不会被处理。
    有两个处理方式,一个是根据过期时间分别建立死信队列,另外一个是使用 Delayed Message 插件
    brader
        5
    brader  
       250 天前
    @dunhanson 我应该就是这个问题了,我记得我之前看过 rabbitmq 延迟队列相关的文章,其中提到一个弊端就是,同一个队列前面入队的长延时消息会阻塞住后面短延时的消息,比如:
    先进去了一条需要延时 1 小时的消息,再进去一条需要延时半小时的小时,实际上半小时后,后一条消息不会出去,因为队列先进先出的特性,被前面的消息堵住了。

    简易解决方案就是把不同延时时间的消息分开来,分到不同队列去
    jworg
        6
    jworg  
       250 天前
    前面有消息没处理吧,用不严谨的话来说是阻塞的,必须等上一个消息消费了,过期的消息才会被处理,然后转发
    linauror
        7
    linauror  
       250 天前
    不过你这个访问一下就转发了,确实挺奇怪的
    brader
        8
    brader  
       250 天前
    @linauror 不奇怪,他把前面哪条长延时还未到时间的消息消耗掉了,后面一条短延时已经到时间的消息,自然就出队了
    dunhanson
        9
    dunhanson  
    OP
       250 天前
    @linauror
    @brader
    @jworg 原来如此,这么坑
    linauror
        10
    linauror  
       250 天前
    @brader 看到了,截图显示的消息已经是 redelivered 状态,表示前面那条消息重新入队了
    silentsky
        11
    silentsky  
       250 天前 via Android
    延迟队列很多坑 建议别用 rabbitmq
    starck
        12
    starck  
       250 天前 via iPhone
    Rabbitmq 会有队头阻塞问题,可以看看他的插件有没有解决这个问题
    VeryZero
        13
    VeryZero  
       249 天前
    还是用插件做定时吧,用死信队列遇到队头阻塞要出事故的
    dunhanson
        14
    dunhanson  
    OP
       249 天前
    @silentsky
    @starck
    @VeryZero 目前场景用着还行,后续看看插件这块
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   922 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 19:56 · PVG 03:56 · LAX 12:56 · JFK 15:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.