ActiveMQ 延迟消息与定时任务

最近在实现一个定时发送推送消息的功能,用到了延迟消息,想整理一下延迟消息消息相关的东西。

实现定时发送这个需求通常有两种方式:

  • 轮询定时任务:给定周期内扫描数据表,查看是否有认为还没执行。
    这种实现可以很简单,只需要启动一个定时任务即可;但缺点同样也很明显,这个间隔扫描的时间不好控制。
    给短了会造成很多无意义的扫描,增大数据库压力,给长了又会使得误差较大。

  • 延时消息:创建定时任务的时候,发送 N 分钟再发出的MQ信息,一旦消息触达,便执行业务逻辑。
    通过延时消息可以去掉不必要的数据扫描,实时性也比较高。

延迟消息

Producer 将消息发送到 MQ 服务端,但并不期望这条消息立马投递,而是延迟一定时间后才投递到 Consumer 进行消费,该消息即延时消息。

支持延迟消息的中间件

ActiveMQ原生自带、RabitMQ需要安装插件(rabbitmq_delayed_message_exchange)、

ActiveMQ延迟消息

我们的系统使用的是ActiveMQ,ActiveMQ从版本5.4开始提供了持久化的延迟消息功能。

为了使用ActiveMQ的延迟消息功能,我们需要修改ActiveMQ的配置文件activemq.xml,
在broker节点上添加schedulerSupport=”true”

ActiveM提供了很多高级的延时消息配置属性:

属性 类型 描述
AMQ_SCHEDULED_DELAY long broker在投递该消息前等待的毫秒数
AMQ_SCHEDULED_PERIOD long 每次重新投递该消息的时间间隔
AMQ_SCHEDULED_REPEAT int 重复投递该消息的次数
AMQ_SCHEDULED_CRON String 使用一个cron表达式来表示消息投递的策略

(完)

发表评论

邮箱地址不会被公开。 必填项已用*标注