美文网首页
mq延时消息

mq延时消息

作者: symop | 来源:发表于2019-03-02 12:22 被阅读0次

原本想写下kafka事务的很多大神都写了,在此引用一篇大佬的文章吧 http://www.jasongj.com/kafka/transaction/

延时消息项目重一般都能用的到,mq用于解耦,有时可能会用到延时消息(比如定时支付),但是有部分mq暂不支持延时消息,比如kafka,rocketmq支持固定的18个Level延时。当然这些可用其他方案代替,至于用到mq延时的优点后面再说。kafka的优缺点,性能等等百度很多,暂不啰嗦。介绍下kafka延时消费方案。

1.kafka消费消息,按照特定格式判断是否需要延时,若需要,则可以用偏移量和topic位置丢到定时任务框架。当时间达到拿到偏移量和topic位置去kafka获取消息消费。

2.kafka消费消息,按照特定格式判断是否需要延时,若需要,则可以用偏移量和topic位置丢到redis,采用key过期事件实现过期提醒,然后拿到偏移量和topic位置去kafka获取消息消费。或者采用其它第三方手段。

以上去除kafka单独提取都可以实现延时消费,使用kafka优是当消息体较大时,省一部分内存。

插个题外话,redis key过期事件通知有两种 

1.当key被访问时,程序会对这个key进行检查,如果key已经过期,那么该key将被删除。

2.定时轮询key是否过期。

当延时消息时间可以达到一周甚至更长,以上实现或许并不是太好的方法,我之前做过多人拼团,拼团过期时间一般可以长达几天。当时采用的mq是rocketmq,rocketmq很多坑慎用(估计会被打),kafka消费消息是拉消息,rocketmq消费消息默认是推消息,实现方案是按照时间切割文件,当时是分割成24个文件,一小时一个文件,还有索引文件主要存放偏移量和过期时间,采用时间轮(kafka,netty都存有时间轮)获取临近一小时文件的偏移量,到期获取消息消息体然后推给消费端,理论上支持任意时间延时,但是也意味着io用过及时关闭,所以qps并不会太高,但是符合需求。优化点太多,暂不啰嗦了。

相关文章

  • mq延时消息

    原本想写下kafka事务的很多大神都写了,在此引用一篇大佬的文章吧http://www.jasongj.com/k...

  • MQ之如何做到消息延时

    一、缘起 很多时候,业务有“在一段时间之后,完成一个工作任务”的需求。 例如:滴滴打车订单完成后,如果用户一直不评...

  • 消息队列

    MQ的作用 消息通信MQ的基础功能即为消息通信。使用MQ的客户端可以将消息发送到MQ中,也可以从MQ中消费消息。 ...

  • ActiveMQ

    一. 引言 ActiveMQ扩展出:API 接受发送MQ 的高可用MQ 的集群容错配置MQ 的持久化延时发送签收机...

  • 高可用延迟队列设计与实现

    延迟队列:一种带有 延迟功能 的消息队列 延时 → 未来一个不确定的时间 mq → 消费行为具有顺序性 这样解释,...

  • 【MQ消息】

    本文主要介绍MQ高可用性、消息幂等性、消息丢失的问题。 为什么使用消息队列?解耦、异步、削峰 如何保证消息队列的高...

  • Mq消息

    https://www.bilibili.com/video/BV1U64y127v1?p=6

  • 消息队列的流派

    消息队列的流派 什么是 MQ Message Queue(MQ),消息队列中间件。很多人都说:MQ 通过将消息的发...

  • rabbitmq保证消息可靠 消息不丢失

    三端可靠 发送方和mq保证消息送达到mq mq保证保存的消息不丢失 消费方和mq一起保证消息被成功消费 发送方和m...

  • rabbitmq保证消息可靠 消息不丢失

    三端可靠 发送方和mq保证消息送达到mq mq保证保存的消息不丢失 消费方和mq一起保证消息被成功消费 发送方和m...

网友评论

      本文标题:mq延时消息

      本文链接:https://www.haomeiwen.com/subject/tuleuqtx.html